1. Table of Contents


1.1 Sample Data


The JobHiring dataset obtained from the Statistics By Jim website by Jim Frost was used for this illustrated example.

Preliminary dataset assessment:

[A] 50 rows (observations)

[B] 12 columns (variables)
     [B.1] 12/12 descriptors = 12/12 ordered category
            [B.1.1] ACAD (Academic Record)
            [B.1.2] APPR (Appearance)
            [B.1.3] COMM (Communication)
            [B.1.4] CFIT (Company Fit)
            [B.1.5] EXPR (Experience)
            [B.1.6] JFIT (Job Fit)
            [B.1.7] LETT (Cover Letter)
            [B.1.8] LIKE (Likeability)
            [B.1.9] ORGN (Organization)
            [B.1.10] POTL (Potential)
            [B.1.11] RESM (Resume)
            [B.1.12] SCON (Self-Confidence)

Code Chunk | Output
##################################
# Loading R libraries
##################################
library(AppliedPredictiveModeling)
library(performance)
library(parameters)
library(caret)
library(psych)
library(lattice)
library(dplyr)
library(moments)
library(skimr)
library(RANN)
library(pls)
library(corrplot)
library(lares)
library(DMwR)
library(gridExtra)
library(rattle)
library(RColorBrewer)
library(stats)
library(factoextra)
library(FactoMineR)
library(gplots)
library(qgraph)
library(ggplot2)
library(psych)
library(nFactors)
library(MBESS)
library(DandEFA)
library(EFAtools)


##################################
# Loading source and
# formulating the analysis set
##################################
JobHiring <- read.csv("JobHiring.csv",
                   na.strings=c("NA","NaN"," ",""),
                   stringsAsFactors = FALSE)
JobHiring <- as.data.frame(JobHiring)

##################################
# Performing a general exploration of the data set
##################################
dim(JobHiring)
## [1] 50 12
str(JobHiring)
## 'data.frame':    50 obs. of  12 variables:
##  $ ACAD: int  6 9 6 7 4 7 6 7 9 6 ...
##  $ APPR: int  8 8 7 8 7 7 8 6 8 8 ...
##  $ COMM: int  7 8 7 6 8 7 6 6 8 7 ...
##  $ CFIT: int  5 8 6 5 6 5 7 5 9 8 ...
##  $ EXPR: int  6 10 6 8 6 5 7 8 9 6 ...
##  $ JFIT: int  5 9 7 5 6 6 7 6 8 7 ...
##  $ LETT: int  7 8 7 9 6 5 8 7 10 8 ...
##  $ LIKE: int  7 9 8 8 7 7 7 6 7 7 ...
##  $ ORGN: int  7 8 8 7 8 8 5 5 8 8 ...
##  $ POTL: int  6 9 6 8 5 7 7 7 8 6 ...
##  $ RESM: int  7 9 6 7 4 4 8 6 9 7 ...
##  $ SCON: int  7 9 8 7 6 6 7 6 8 7 ...
summary(JobHiring)
##       ACAD            APPR            COMM            CFIT      
##  Min.   : 4.00   Min.   : 5.00   Min.   : 3.00   Min.   : 3.00  
##  1st Qu.: 6.25   1st Qu.: 7.00   1st Qu.: 6.00   1st Qu.: 6.00  
##  Median : 7.00   Median : 7.50   Median : 7.00   Median : 7.00  
##  Mean   : 7.40   Mean   : 7.44   Mean   : 6.86   Mean   : 6.88  
##  3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.: 8.00  
##  Max.   :10.00   Max.   :10.00   Max.   :10.00   Max.   :10.00  
##       EXPR            JFIT            LETT            LIKE           ORGN     
##  Min.   : 5.00   Min.   : 3.00   Min.   : 4.00   Min.   :4.00   Min.   :3.00  
##  1st Qu.: 6.00   1st Qu.: 6.00   1st Qu.: 6.00   1st Qu.:7.00   1st Qu.:5.25  
##  Median : 7.00   Median : 7.00   Median : 7.00   Median :7.50   Median :7.00  
##  Mean   : 7.32   Mean   : 7.02   Mean   : 7.22   Mean   :7.38   Mean   :6.86  
##  3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.: 8.00   3rd Qu.:8.00   3rd Qu.:8.00  
##  Max.   :10.00   Max.   :10.00   Max.   :10.00   Max.   :9.00   Max.   :9.00  
##       POTL           RESM            SCON     
##  Min.   : 4.0   Min.   : 4.00   Min.   :5.00  
##  1st Qu.: 6.0   1st Qu.: 6.00   1st Qu.:7.00  
##  Median : 7.5   Median : 7.00   Median :7.00  
##  Mean   : 7.3   Mean   : 7.24   Mean   :7.34  
##  3rd Qu.: 8.0   3rd Qu.: 9.00   3rd Qu.:8.00  
##  Max.   :10.0   Max.   :10.00   Max.   :9.00
##################################
# Formulating a data type assessment summary
##################################
PDA <- JobHiring
(PDA.Summary <- data.frame(
  Column.Index=c(1:length(names(PDA))),
  Column.Name= names(PDA), 
  Column.Type=sapply(PDA, function(x) class(x)), 
  row.names=NULL)
)
##    Column.Index Column.Name Column.Type
## 1             1        ACAD     integer
## 2             2        APPR     integer
## 3             3        COMM     integer
## 4             4        CFIT     integer
## 5             5        EXPR     integer
## 6             6        JFIT     integer
## 7             7        LETT     integer
## 8             8        LIKE     integer
## 9             9        ORGN     integer
## 10           10        POTL     integer
## 11           11        RESM     integer
## 12           12        SCON     integer

1.2 Data Quality Assessment


Data quality assessment:

[A] No missing observations noted for any variable.

[B] No low variance observed for any variable with First.Second.Mode.Ratio>5.

[C] No low variance observed for any variable with Unique.Count.Ratio<0.01.

[D] No high skewness observed for any variable with Skewness>3 or Skewness<(-3).

Code Chunk | Output
##################################
# Loading dataset
##################################
DQA <- JobHiring

##################################
# Formulating an overall data quality assessment summary
##################################
(DQA.Summary <- data.frame(
  Column.Name= names(DQA),
  Column.Type=sapply(DQA, function(x) class(x)),
  Row.Count=sapply(DQA, function(x) nrow(DQA)),
  NA.Count=sapply(DQA,function(x)sum(is.na(x))),
  Fill.Rate=sapply(DQA,function(x)format(round((sum(!is.na(x))/nrow(DQA)),3),nsmall=3)),
  row.names=NULL)
)
##    Column.Name Column.Type Row.Count NA.Count Fill.Rate
## 1         ACAD     integer        50        0     1.000
## 2         APPR     integer        50        0     1.000
## 3         COMM     integer        50        0     1.000
## 4         CFIT     integer        50        0     1.000
## 5         EXPR     integer        50        0     1.000
## 6         JFIT     integer        50        0     1.000
## 7         LETT     integer        50        0     1.000
## 8         LIKE     integer        50        0     1.000
## 9         ORGN     integer        50        0     1.000
## 10        POTL     integer        50        0     1.000
## 11        RESM     integer        50        0     1.000
## 12        SCON     integer        50        0     1.000
##################################
# Listing all descriptors
##################################
DQA.Descriptors <- DQA

##################################
# Listing all numeric Descriptors
##################################
DQA.Descriptors.Numeric <- DQA.Descriptors[,sapply(DQA.Descriptors, is.numeric)]

if (length(names(DQA.Descriptors.Numeric))>0) {
    print(paste0("There are ",
               (length(names(DQA.Descriptors.Numeric))),
               " numeric descriptor variable(s)."))
} else {
  print("There are no numeric descriptor variables.")
}
## [1] "There are 12 numeric descriptor variable(s)."
##################################
# Listing all factor Descriptors
##################################
DQA.Descriptors.Factor <- DQA.Descriptors[,sapply(DQA.Descriptors, is.factor)]

if (length(names(DQA.Descriptors.Factor))>0) {
    print(paste0("There are ",
               (length(names(DQA.Descriptors.Factor))),
               " factor descriptor variable(s)."))
} else {
  print("There are no factor descriptor variables.")
}
## [1] "There are no factor descriptor variables."
##################################
# Formulating a data quality assessment summary for factor Descriptors
##################################
if (length(names(DQA.Descriptors.Factor))>0) {

  ##################################
  # Formulating a function to determine the first mode
  ##################################
  FirstModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    ux[tab == max(tab)]
  }

  ##################################
  # Formulating a function to determine the second mode
  ##################################
  SecondModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    fm = ux[tab == max(tab)]
    sm = x[!(x %in% fm)]
    usm <- unique(sm)
    tabsm <- tabulate(match(sm, usm))
    ifelse(is.na(usm[tabsm == max(tabsm)])==TRUE,
           return("x"),
           return(usm[tabsm == max(tabsm)]))
  }

  (DQA.Descriptors.Factor.Summary <- data.frame(
  Column.Name= names(DQA.Descriptors.Factor),
  Column.Type=sapply(DQA.Descriptors.Factor, function(x) class(x)),
  Unique.Count=sapply(DQA.Descriptors.Factor, function(x) length(unique(x))),
  First.Mode.Value=sapply(DQA.Descriptors.Factor, function(x) as.character(FirstModes(x)[1])),
  Second.Mode.Value=sapply(DQA.Descriptors.Factor, function(x) as.character(SecondModes(x)[1])),
  First.Mode.Count=sapply(DQA.Descriptors.Factor, function(x) sum(na.omit(x) == FirstModes(x)[1])),
  Second.Mode.Count=sapply(DQA.Descriptors.Factor, function(x) sum(na.omit(x) == SecondModes(x)[1])),
  Unique.Count.Ratio=sapply(DQA.Descriptors.Factor, function(x) format(round((length(unique(x))/nrow(DQA.Descriptors.Factor)),3), nsmall=3)),
  First.Second.Mode.Ratio=sapply(DQA.Descriptors.Factor, function(x) format(round((sum(na.omit(x) == FirstModes(x)[1])/sum(na.omit(x) == SecondModes(x)[1])),3), nsmall=3)),
  row.names=NULL)
  )

}

##################################
# Formulating a data quality assessment summary for numeric Descriptors
##################################
if (length(names(DQA.Descriptors.Numeric))>0) {

  ##################################
  # Formulating a function to determine the first mode
  ##################################
  FirstModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    ux[tab == max(tab)]
  }

  ##################################
  # Formulating a function to determine the second mode
  ##################################
  SecondModes <- function(x) {
    ux <- unique(na.omit(x))
    tab <- tabulate(match(x, ux))
    fm = ux[tab == max(tab)]
    sm = na.omit(x)[!(na.omit(x) %in% fm)]
    usm <- unique(sm)
    tabsm <- tabulate(match(sm, usm))
    ifelse(is.na(usm[tabsm == max(tabsm)])==TRUE,
           return(0.00001),
           return(usm[tabsm == max(tabsm)]))
  }

  (DQA.Descriptors.Numeric.Summary <- data.frame(
  Column.Name= names(DQA.Descriptors.Numeric),
  Column.Type=sapply(DQA.Descriptors.Numeric, function(x) class(x)),
  Unique.Count=sapply(DQA.Descriptors.Numeric, function(x) length(unique(x))),
  Unique.Count.Ratio=sapply(DQA.Descriptors.Numeric, function(x) format(round((length(unique(x))/nrow(DQA.Descriptors.Numeric)),3), nsmall=3)),
  First.Mode.Value=sapply(DQA.Descriptors.Numeric, function(x) format(round((FirstModes(x)[1]),3),nsmall=3)),
  Second.Mode.Value=sapply(DQA.Descriptors.Numeric, function(x) format(round((SecondModes(x)[1]),3),nsmall=3)),
  First.Mode.Count=sapply(DQA.Descriptors.Numeric, function(x) sum(na.omit(x) == FirstModes(x)[1])),
  Second.Mode.Count=sapply(DQA.Descriptors.Numeric, function(x) sum(na.omit(x) == SecondModes(x)[1])),
  First.Second.Mode.Ratio=sapply(DQA.Descriptors.Numeric, function(x) format(round((sum(na.omit(x) == FirstModes(x)[1])/sum(na.omit(x) == SecondModes(x)[1])),3), nsmall=3)),
  Minimum=sapply(DQA.Descriptors.Numeric, function(x) format(round(min(x,na.rm = TRUE),3), nsmall=3)),
  Mean=sapply(DQA.Descriptors.Numeric, function(x) format(round(mean(x,na.rm = TRUE),3), nsmall=3)),
  Median=sapply(DQA.Descriptors.Numeric, function(x) format(round(median(x,na.rm = TRUE),3), nsmall=3)),
  Maximum=sapply(DQA.Descriptors.Numeric, function(x) format(round(max(x,na.rm = TRUE),3), nsmall=3)),
  Skewness=sapply(DQA.Descriptors.Numeric, function(x) format(round(skewness(x,na.rm = TRUE),3), nsmall=3)),
  Kurtosis=sapply(DQA.Descriptors.Numeric, function(x) format(round(kurtosis(x,na.rm = TRUE),3), nsmall=3)),
  Percentile25th=sapply(DQA.Descriptors.Numeric, function(x) format(round(quantile(x,probs=0.25,na.rm = TRUE),3), nsmall=3)),
  Percentile75th=sapply(DQA.Descriptors.Numeric, function(x) format(round(quantile(x,probs=0.75,na.rm = TRUE),3), nsmall=3)),
  row.names=NULL)
  )

}
##    Column.Name Column.Type Unique.Count Unique.Count.Ratio First.Mode.Value
## 1         ACAD     integer            7              0.140            7.000
## 2         APPR     integer            6              0.120            8.000
## 3         COMM     integer            8              0.160            7.000
## 4         CFIT     integer            8              0.160            8.000
## 5         EXPR     integer            6              0.120            8.000
## 6         JFIT     integer            7              0.140            7.000
## 7         LETT     integer            7              0.140            8.000
## 8         LIKE     integer            6              0.120            8.000
## 9         ORGN     integer            7              0.140            7.000
## 10        POTL     integer            7              0.140            8.000
## 11        RESM     integer            7              0.140            9.000
## 12        SCON     integer            5              0.100            7.000
##    Second.Mode.Value First.Mode.Count Second.Mode.Count First.Second.Mode.Ratio
## 1              8.000               14                12                   1.167
## 2              7.000               19                16                   1.188
## 3              8.000               15                14                   1.071
## 4              7.000               15                11                   1.364
## 5              6.000               12                10                   1.200
## 6              8.000               13                12                   1.083
## 7              7.000               12                11                   1.091
## 8              7.000               18                16                   1.125
## 9              5.000               12                10                   1.200
## 10             7.000               15                11                   1.364
## 11             6.000               12                11                   1.091
## 12             8.000               16                14                   1.143
##    Minimum  Mean Median Maximum Skewness Kurtosis Percentile25th Percentile75th
## 1    4.000 7.400  7.000  10.000   -0.091    2.687          6.250          8.000
## 2    5.000 7.440  7.500  10.000   -0.014    2.861          7.000          8.000
## 3    3.000 6.860  7.000  10.000   -0.689    3.572          6.000          8.000
## 4    3.000 6.880  7.000  10.000   -0.324    2.484          6.000          8.000
## 5    5.000 7.320  7.000  10.000   -0.007    2.136          6.000          8.000
## 6    3.000 7.020  7.000  10.000   -0.610    3.541          6.000          8.000
## 7    4.000 7.220  7.000  10.000   -0.140    2.271          6.000          8.000
## 8    4.000 7.380  7.500   9.000   -0.701    3.506          7.000          8.000
## 9    3.000 6.860  7.000   9.000   -0.397    2.238          5.250          8.000
## 10   4.000 7.300  7.500  10.000   -0.457    2.681          6.000          8.000
## 11   4.000 7.240  7.000  10.000   -0.254    2.155          6.000          9.000
## 12   5.000 7.340  7.000   9.000   -0.302    2.365          7.000          8.000
##################################
# Identifying potential data quality issues
##################################

##################################
# Checking for missing observations
##################################
if ((nrow(DQA.Summary[DQA.Summary$NA.Count>0,]))>0){
  print(paste0("Missing observations noted for ",
               (nrow(DQA.Summary[DQA.Summary$NA.Count>0,])),
               " variable(s) with NA.Count>0 and Fill.Rate<1.0."))
  DQA.Summary[DQA.Summary$NA.Count>0,]
} else {
  print("No missing observations noted.")
}
## [1] "No missing observations noted."
##################################
# Checking for zero or near-zero variance Descriptors
##################################
if (length(names(DQA.Descriptors.Factor))==0) {
  print("No factor descriptors noted.")
} else if (nrow(DQA.Descriptors.Factor.Summary[as.numeric(as.character(DQA.Descriptors.Factor.Summary$First.Second.Mode.Ratio))>5,])>0){
  print(paste0("Low variance observed for ",
               (nrow(DQA.Descriptors.Factor.Summary[as.numeric(as.character(DQA.Descriptors.Factor.Summary$First.Second.Mode.Ratio))>5,])),
               " factor variable(s) with First.Second.Mode.Ratio>5."))
  DQA.Descriptors.Factor.Summary[as.numeric(as.character(DQA.Descriptors.Factor.Summary$First.Second.Mode.Ratio))>5,]
} else {
  print("No low variance factor descriptors due to high first-second mode ratio noted.")
}
## [1] "No factor descriptors noted."
if (length(names(DQA.Descriptors.Numeric))==0) {
  print("No numeric descriptors noted.")
} else if (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$First.Second.Mode.Ratio))>5,])>0){
  print(paste0("Low variance observed for ",
               (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$First.Second.Mode.Ratio))>5,])),
               " numeric variable(s) with First.Second.Mode.Ratio>5."))
  DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$First.Second.Mode.Ratio))>5,]
} else {
  print("No low variance numeric descriptors due to high first-second mode ratio noted.")
}
## [1] "No low variance numeric descriptors due to high first-second mode ratio noted."
if (length(names(DQA.Descriptors.Numeric))==0) {
  print("No numeric descriptors noted.")
} else if (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Unique.Count.Ratio))<0.01,])>0){
  print(paste0("Low variance observed for ",
               (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Unique.Count.Ratio))<0.01,])),
               " numeric variable(s) with Unique.Count.Ratio<0.01."))
  DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Unique.Count.Ratio))<0.01,]
} else {
  print("No low variance numeric descriptors due to low unique count ratio noted.")
}
## [1] "No low variance numeric descriptors due to low unique count ratio noted."
##################################
# Checking for skewed Descriptors
##################################
if (length(names(DQA.Descriptors.Numeric))==0) {
  print("No numeric descriptors noted.")
} else if (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))>3 |
                                               as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))<(-3),])>0){
  print(paste0("High skewness observed for ",
  (nrow(DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))>3 |
                                               as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))<(-3),])),
  " numeric variable(s) with Skewness>3 or Skewness<(-3)."))
  DQA.Descriptors.Numeric.Summary[as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))>3 |
                                 as.numeric(as.character(DQA.Descriptors.Numeric.Summary$Skewness))<(-3),]
} else {
  print("No skewed numeric descriptors noted.")
}
## [1] "No skewed numeric descriptors noted."

1.3 Data Preprocessing

1.3.1 Outlier Detection


[A] Outliers noted for 3 out of the 12 descriptors. Descriptor values were visualized through a boxplot including observations classified as suspected outliers using the IQR criterion. The IQR criterion means that all observations above the (75th percentile + 1.5 x IQR) or below the (25th percentile - 1.5 x IQR) are suspected outliers, where IQR is the difference between the third quartile (75th percentile) and first quartile (25th percentile).
     [A.1] APPR = 2
     [A.2] LIKE = 3
     [A.3] SCON = 4

Code Chunk | Output
##################################
# Loading dataset
##################################
DPA <- JobHiring

##################################
# Gathering descriptive statistics
##################################
(DPA_Skimmed <- skim(DPA))
Data summary
Name DPA
Number of rows 50
Number of columns 12
_______________________
Column type frequency:
numeric 12
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
ACAD 0 1 7.40 1.29 4 6.25 7.0 8 10 ▁▆▇▇▆
APPR 0 1 7.44 1.01 5 7.00 7.5 8 10 ▃▇▇▂▁
COMM 0 1 6.86 1.47 3 6.00 7.0 8 10 ▁▁▇▅▁
CFIT 0 1 6.88 1.62 3 6.00 7.0 8 10 ▂▃▇▇▃
EXPR 0 1 7.32 1.36 5 6.00 7.0 8 10 ▇▆▆▅▁
JFIT 0 1 7.02 1.60 3 6.00 7.0 8 10 ▁▁▇▃▂
LETT 0 1 7.22 1.67 4 6.00 7.0 8 10 ▆▅▇▇▇
LIKE 0 1 7.38 1.12 4 7.00 7.5 8 9 ▁▂▇▇▃
ORGN 0 1 6.86 1.58 3 5.25 7.0 8 9 ▁▃▂▅▇
POTL 0 1 7.30 1.39 4 6.00 7.5 8 10 ▂▅▆▇▅
RESM 0 1 7.24 1.68 4 6.00 7.0 9 10 ▃▆▅▅▇
SCON 0 1 7.34 1.17 5 7.00 7.0 8 9 ▂▃▇▇▅
##################################
# Outlier Detection
##################################

##################################
# Listing all Descriptors
##################################
DPA.Descriptors <- DPA

##################################
# Listing all numeric Descriptors
##################################
DPA.Descriptors.Numeric <- DPA.Descriptors[,sapply(DPA.Descriptors, is.numeric)]

##################################
# Identifying outliers for the numeric Descriptors
##################################
OutlierCountList <- c()

for (i in 1:ncol(DPA.Descriptors.Numeric)) {
  Outliers <- boxplot.stats(DPA.Descriptors.Numeric[,i])$out
  OutlierCount <- length(Outliers)
  OutlierCountList <- append(OutlierCountList,OutlierCount)
  OutlierIndices <- which(DPA.Descriptors.Numeric[,i] %in% c(Outliers))
  print(
  ggplot(DPA.Descriptors.Numeric, aes(x=DPA.Descriptors.Numeric[,i])) +
  geom_boxplot() +
  theme_bw() +
  theme(axis.text.y=element_blank(), 
        axis.ticks.y=element_blank()) +
  xlab(names(DPA.Descriptors.Numeric)[i]) +
  labs(title=names(DPA.Descriptors.Numeric)[i],
       subtitle=paste0(OutlierCount, " Outlier(s) Detected")))
}

1.3.2 Zero and Near-Zero Variance


[A] No low variance observed for any descriptor using a preprocessing summary from the caret package. The nearZeroVar method using both the freqCut and uniqueCut criteria set at 95/5 and 10, respectively, were applied on the dataset.

Code Chunk | Output
##################################
# Zero and Near-Zero Variance
##################################

##################################
# Identifying columns with low variance
###################################
DPA_LowVariance <- nearZeroVar(DPA,
                               freqCut = 80/20,
                               uniqueCut = 10,
                               saveMetrics= TRUE)
(DPA_LowVariance[DPA_LowVariance$nzv,])
## [1] freqRatio     percentUnique zeroVar       nzv          
## <0 rows> (or 0-length row.names)
if ((nrow(DPA_LowVariance[DPA_LowVariance$nzv,]))==0){
  
  print("No low variance descriptors noted.")
  
} else {

  print(paste0("Low variance observed for ",
               (nrow(DPA_LowVariance[DPA_LowVariance$nzv,])),
               " numeric variable(s) with First.Second.Mode.Ratio>4 and Unique.Count.Ratio<0.10."))
  
  DPA_LowVarianceForRemoval <- (nrow(DPA_LowVariance[DPA_LowVariance$nzv,]))
  
  print(paste0("Low variance can be resolved by removing ",
               (nrow(DPA_LowVariance[DPA_LowVariance$nzv,])),
               " numeric variable(s)."))
  
  for (j in 1:DPA_LowVarianceForRemoval) {
  DPA_LowVarianceRemovedVariable <- rownames(DPA_LowVariance[DPA_LowVariance$nzv,])[j]
  print(paste0("Variable ",
               j,
               " for removal: ",
               DPA_LowVarianceRemovedVariable))
  }
  
  DPA %>%
  skim() %>%
  dplyr::filter(skim_variable %in% rownames(DPA_LowVariance[DPA_LowVariance$nzv,]))

}
## [1] "No low variance descriptors noted."

1.3.3 Collinearity


[A] No multicollinearity with Pearson correlation coefficients >80% was noted among pairs of descriptors using the preprocessing summary from the caret package.

Code Chunk | Output
##################################
# Visualizing pairwise correlation between descriptor
##################################
(DPA_Correlation <- cor(DPA.Descriptors.Numeric,
                        method = "pearson",
                        use="pairwise.complete.obs"))
##           ACAD      APPR      COMM      CFIT      EXPR      JFIT      LETT
## ACAD 1.0000000 0.4701427 0.4054067 0.4992183 0.6672390 0.5393435 0.3269457
## APPR 0.4701427 1.0000000 0.4939720 0.4170806 0.3099465 0.4105762 0.3034917
## COMM 0.4054067 0.4939720 1.0000000 0.5907387 0.1960094 0.5050808 0.4033781
## CFIT 0.4992183 0.4170806 0.5907387 1.0000000 0.3959678 0.8820580 0.4539438
## EXPR 0.6672390 0.3099465 0.1960094 0.3959678 1.0000000 0.5224501 0.4800248
## JFIT 0.5393435 0.4105762 0.5050808 0.8820580 0.5224501 1.0000000 0.4652077
## LETT 0.3269457 0.3034917 0.4033781 0.4539438 0.4800248 0.4652077 1.0000000
## LIKE 0.3990134 0.6392098 0.4900438 0.4842812 0.3058838 0.5305521 0.3572902
## ORGN 0.3578991 0.5370193 0.8617976 0.6223051 0.1732109 0.5274873 0.3372713
## POTL 0.7951979 0.5133541 0.4206029 0.6586426 0.7035542 0.7057635 0.3846555
## RESM 0.4606419 0.4986309 0.4255336 0.4432190 0.5172440 0.4607897 0.8368872
## SCON 0.4067717 0.6967065 0.4309427 0.4616973 0.4037882 0.4654267 0.2323177
##           LIKE      ORGN      POTL      RESM      SCON
## ACAD 0.3990134 0.3578991 0.7951979 0.4606419 0.4067717
## APPR 0.6392098 0.5370193 0.5133541 0.4986309 0.6967065
## COMM 0.4900438 0.8617976 0.4206029 0.4255336 0.4309427
## CFIT 0.4842812 0.6223051 0.6586426 0.4432190 0.4616973
## EXPR 0.3058838 0.1732109 0.7035542 0.5172440 0.4037882
## JFIT 0.5305521 0.5274873 0.7057635 0.4607897 0.4654267
## LETT 0.3572902 0.3372713 0.3846555 0.8368872 0.2323177
## LIKE 1.0000000 0.5258919 0.4881676 0.4685663 0.7532282
## ORGN 0.5258919 1.0000000 0.4199960 0.2968767 0.4900298
## POTL 0.4881676 0.4199960 1.0000000 0.4570046 0.5006195
## RESM 0.4685663 0.2968767 0.4570046 1.0000000 0.4334882
## SCON 0.7532282 0.4900298 0.5006195 0.4334882 1.0000000
DPA_CorrelationTest <- cor.mtest(DPA.Descriptors.Numeric,
                       method = "pearson",
                       conf.level = 0.95)

corrplot(cor(DPA.Descriptors.Numeric,
             method = "pearson",
             use="pairwise.complete.obs"),
             method = "circle",
             type = "upper",
             order = "original",
             tl.col = "black",
             tl.cex = 0.75,
             tl.srt = 90,
             sig.level = 0.05,
             p.mat = DPA_CorrelationTest$p,
             insig = "blank")

corrplot(cor(DPA.Descriptors.Numeric,
             method = "pearson",
             use="pairwise.complete.obs"),
             method = "number",
             type = "upper",
             order = "original",
             tl.col = "black",
             tl.cex = 0.75,
             tl.srt = 90,
             sig.level = 0.05,
             p.mat = DPA_CorrelationTest$p,
             insig = "blank")

##################################
# Identifying the highly correlated variables
##################################
(DPA_HighlyCorrelatedCount <- sum(abs(DPA_Correlation[upper.tri(DPA_Correlation)])>0.90))
## [1] 0
if (DPA_HighlyCorrelatedCount > 0) {
  DPA_HighlyCorrelated <- findCorrelation(DPA_Correlation, cutoff = 0.90)

  (DPA_HighlyCorrelatedForRemoval <- length(DPA_HighlyCorrelated))

  print(paste0("High correlation can be resolved by removing ",
               (DPA_HighlyCorrelatedForRemoval),
               " numeric variable(s)."))

  for (j in 1:DPA_HighlyCorrelatedForRemoval) {
  DPA_HighlyCorrelatedRemovedVariable <- colnames(DPA.Predictors.Numeric)[DPA_HighlyCorrelated[j]]
  print(paste0("Variable ",
               j,
               " for removal: ",
               DPA_HighlyCorrelatedRemovedVariable))
  }

}

1.3.4 Linear Dependency


[A] No linear dependencies noted for any subset of decriptors using the preprocessing summary from the caret package applying the findLinearCombos method which utilizes the QR decomposition of a matrix to enumerate sets of linear combinations (if they exist).

Code Chunk | Output
##################################
# Linear Dependencies
##################################

##################################
# Finding linear dependencies
##################################
DPA_LinearlyDependent <- findLinearCombos(DPA.Descriptors.Numeric)

##################################
# Identifying the linearly dependent variables
##################################
DPA_LinearlyDependent <- findLinearCombos(DPA.Descriptors.Numeric)

(DPA_LinearlyDependentCount <- length(DPA_LinearlyDependent$linearCombos))
## [1] 0
if (DPA_LinearlyDependentCount == 0) {
  print("No linearly dependent predictors noted.")
} else {
  print(paste0("Linear dependency observed for ",
               (DPA_LinearlyDependentCount),
               " subset(s) of numeric variable(s)."))
  
  for (i in 1:DPA_LinearlyDependentCount) {
    DPA_LinearlyDependentSubset <- colnames(DPA.Predictors.Numeric)[DPA_LinearlyDependent$linearCombos[[i]]]
    print(paste0("Linear dependent variable(s) for subset ",
                 i,
                 " include: ",
                 DPA_LinearlyDependentSubset))
  }
  
}
## [1] "No linearly dependent predictors noted."
##################################
# Identifying the linearly dependent variables for removal
##################################

if (DPA_LinearlyDependentCount > 0) {
  DPA_LinearlyDependent <- findLinearCombos(DPA.Predictors.Numeric)
  
  DPA_LinearlyDependentForRemoval <- length(DPA_LinearlyDependent$remove)
  
  print(paste0("Linear dependency can be resolved by removing ",
               (DPA_LinearlyDependentForRemoval),
               " numeric variable(s)."))
  
  for (j in 1:DPA_LinearlyDependentForRemoval) {
  DPA_LinearlyDependentRemovedVariable <- colnames(DPA.Predictors.Numeric)[DPA_LinearlyDependent$remove[j]]
  print(paste0("Variable ",
               j,
               " for removal: ",
               DPA_LinearlyDependentRemovedVariable))
  }

}

1.3.5 Distributional Shape


[A] No shape transformation was necessary to be applied as the distributional skewness observed among individual descriptors was normal (all values within +3 and -3) with minimal outliers.

Code Chunk | Output
##################################
# Distributional Shape
##################################

##################################
# Formulating the histogram
# for the numeric descriptors
##################################
for (i in 1:ncol(DPA.Descriptors.Numeric)) {
  Median <- format(round(median(DPA.Descriptors.Numeric[,i],na.rm = TRUE),2), nsmall=2)
  Mean <- format(round(mean(DPA.Descriptors.Numeric[,i],na.rm = TRUE),2), nsmall=2)
  Skewness <- format(round(skewness(DPA.Descriptors.Numeric[,i],na.rm = TRUE),2), nsmall=2)
  print(
  ggplot(DPA.Descriptors.Numeric, aes(x=DPA.Descriptors.Numeric[,i])) +
  geom_histogram(binwidth=1,color="black", fill="white") +
  geom_vline(aes(xintercept=mean(DPA.Descriptors.Numeric[,i])),
            color="blue", size=1) +
    geom_vline(aes(xintercept=median(DPA.Descriptors.Numeric[,i])),
            color="red", size=1) +
  theme_bw() +
  ylab("Count") +
  xlab(names(DPA.Descriptors.Numeric)[i]) +
  labs(title=names(DPA.Descriptors.Numeric)[i],
       subtitle=paste0("Median = ", Median,
                       ", Mean = ", Mean,
                       ", Skewness = ", Skewness)))
}

1.4 Data Pre-Assessment

1.4.1 Correlation Matrix Assessment - Covariance Validity




Code Chunk | Output
##################################
# Identifying the minimally correlated variables
##################################
(DPA_MinimallyCorrelatedCount <- sum(abs(DPA_Correlation[upper.tri(DPA_Correlation)])>0.30))
## [1] 62
(DPA_AllPairs <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(DPA_MinimallyCorrelatedCountPercentage <- DPA_MinimallyCorrelatedCount/DPA_AllPairs)
## [1] 0.9393939
qgraph(cor(DPA.Descriptors.Numeric),
       cut=0.30,
       details=TRUE,
       posCol="#2F75B5",
       negCol="#FF5050",
       labels=names(DPA.Descriptors.Numeric))

1.4.2 Correlation Matrix Assessment - Determinant Computation




Code Chunk | Output
##################################
# Computing the determinant of the correlation matrix
##################################
(DPA_CorrelationMatrixDeterminant <- det(cor(DPA.Descriptors.Numeric)))
## [1] 2.258001e-05

1.4.3 Correlation Matrix Assessment - Bartlett’s Test of Sphericity




Code Chunk | Output
##################################
# Calculating the Bartlett's Test of Sphericity
##################################
(DPA_BartlettTest <- cortest.bartlett(DPA.Descriptors.Numeric,
                                      n=nrow(DPA.Descriptors.Numeric)))
## $chisq
## [1] 472.5147
## 
## $p.value
## [1] 9.677847e-63
## 
## $df
## [1] 66

1.4.4 Correlation Matrix Assessment - Kaiser-Meyer-Olkin Factor Adequacy




Code Chunk | Output
##################################
# Calculating the Kaiser-Meyer-Olkin Factor Adequacy
##################################
(DPA_KMOFactorAdequacy <- KMO(DPA.Descriptors.Numeric))
## 
## -- Kaiser-Meyer-Olkin criterion (KMO) ------------------------------------------
## 
## v The overall KMO value for your data is middling.
##   These data are probably suitable for factor analysis.
## 
##   Overall: 0.798
## 
##   For each variable:
##  ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM  SCON 
## 0.847 0.876 0.790 0.809 0.782 0.827 0.676 0.851 0.740 0.883 0.712 0.777

1.4.5 Factor Retention - Maximum Consensus




Code Chunk | Output
##################################
# Implementing various procedures for determining
# factor retention based on
# the maximum consensus between methods
##################################
(DPA_MethodAgreementProcedure <- parameters::n_factors(DPA.Descriptors.Numeric))
## # Method Agreement Procedure:
## 
## The choice of 4 dimensions is supported by 5 (35.71%) methods out of 14 (Bentler, beta, Parallel analysis, Kaiser criterion, Scree (SE)).
as.data.frame(DPA_MethodAgreementProcedure)
##    n_Factors              Method              Family
## 1          1 Acceleration factor               Scree
## 2          1          Scree (R2)            Scree_SE
## 3          2 Optimal coordinates               Scree
## 4          3                 CNG                 CNG
## 5          4             Bentler             Bentler
## 6          4                beta Multiple_regression
## 7          4   Parallel analysis               Scree
## 8          4    Kaiser criterion               Scree
## 9          4          Scree (SE)            Scree_SE
## 10         6            Bartlett             Barlett
## 11         6                   t Multiple_regression
## 12         6                   p Multiple_regression
## 13         7            Anderson             Barlett
## 14         7              Lawley             Barlett

1.5 Data Exploration


Exploratory data analysis:

[A] Critic and audience scores including their gaps from both sources were correlated.
     [A.1] High Tomatometer_Critic = High IMDB_Critic
     [A.2] High Tomatometer_Audience = High IMDB_Audience
     [A.3] Low Tomatometer_Critic_Audience_Gap = Low IMDB_Critic_Audience_Gap

Code Chunk | Output
##################################
# Exploratory analysis
# among quantitative descriptors
##################################
splom(~DPA.Descriptors.Numeric,
      pch = 16,
      cex = 1,
      alpha = 0.45,
      auto.key = list(points = TRUE, space = "right"),
      main = "Exploratory Analysis Between Descriptors",
      xlab = "Scatterplot Matrix of Descriptors")

1.6 Factor Analysis

1.6.1 Principal Axes Factor Extraction and Varimax Rotation (FA_PA_V)




Code Chunk | Output
##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Varimax rotation
# with 3 factors
##################################
(FA_PA_V_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="pa",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PA1  PA2  PA3   h2   u2 com
## ACAD 0.28 0.74 0.16 0.65 0.35 1.4
## APPR 0.60 0.32 0.18 0.50 0.50 1.7
## COMM 0.79 0.10 0.22 0.69 0.31 1.2
## CFIT 0.60 0.46 0.22 0.61 0.39 2.2
## EXPR 0.05 0.76 0.34 0.69 0.31 1.4
## JFIT 0.52 0.56 0.24 0.64 0.36 2.4
## LETT 0.22 0.20 0.88 0.86 0.14 1.2
## LIKE 0.64 0.31 0.19 0.54 0.46 1.6
## ORGN 0.88 0.09 0.11 0.79 0.21 1.0
## POTL 0.36 0.85 0.14 0.87 0.13 1.4
## RESM 0.28 0.31 0.81 0.83 0.17 1.5
## SCON 0.60 0.37 0.11 0.51 0.49 1.8
## 
##                        PA1  PA2  PA3
## SS loadings           3.49 2.85 1.84
## Proportion Var        0.29 0.24 0.15
## Cumulative Var        0.29 0.53 0.68
## Proportion Explained  0.43 0.35 0.22
## Cumulative Proportion 0.43 0.78 1.00
## 
## Mean item complexity =  1.6
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.52 
## 
## The root mean square of the residuals (RMSR) is  0.07 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  35.54  with prob <  0.35 
## The total number of observations was  50  with Likelihood Chi Square =  106.33  with prob <  1.2e-09 
## 
## Tucker Lewis Index of factoring reliability =  0.619
## RMSEA index =  0.21  and the 90 % confidence intervals are  0.168 0.259
## BIC =  -22.76
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA3
## Correlation of (regression) scores with factors   0.94 0.94 0.94
## Multiple R square of scores with factors          0.88 0.88 0.88
## Minimum correlation of possible factor scores     0.76 0.75 0.75
(FA_PA_V_3F_Summary <- FA_PA_V_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | PA1  | PA2  | PA3  | Complexity | Uniqueness
## -------------------------------------------------------
## ORGN     | 0.88 |      |      |    1.05    |    0.21   
## COMM     | 0.79 |      |      |    1.19    |    0.31   
## LIKE     | 0.64 |      |      |    1.65    |    0.46   
## APPR     | 0.60 |      |      |    1.72    |    0.50   
## SCON     | 0.60 |      |      |    1.76    |    0.49   
## CFIT     | 0.60 |      |      |    2.19    |    0.39   
## POTL     |      | 0.85 |      |    1.41    |    0.13   
## EXPR     |      | 0.76 |      |    1.40    |    0.31   
## ACAD     |      | 0.74 |      |    1.40    |    0.35   
## JFIT     |      | 0.56 |      |    2.35    |    0.36   
## LETT     |      |      | 0.88 |    1.23    |    0.14   
## RESM     |      |      | 0.81 |    1.54    |    0.17   
## 
## The 3 latent factors (varimax rotation) accounted for 68.18% of the total variance of the original data (PA1 = 29.08%, PA2 = 23.78%, PA3 = 15.33%).
summary(FA_PA_V_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA3
## -------------------------------------------------------
## Eigenvalues                     | 6.069 | 1.209 | 0.903
## Variance Explained              | 0.291 | 0.238 | 0.153
## Variance Explained (Cumulative) | 0.291 | 0.529 | 0.682
## Variance Explained (Proportion) | 0.427 | 0.349 | 0.225
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_V_3F_Residual <- residuals(FA_PA_V_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.07 -0.06    NA                                                
## CFIT -0.04 -0.13  0.02    NA                                          
## EXPR  0.04 -0.02  0.00 -0.06    NA                                    
## JFIT -0.06 -0.12 -0.01  0.27 -0.01    NA                              
## LETT -0.02 -0.05  0.01  0.04  0.02  0.03    NA                        
## LIKE -0.04  0.12 -0.09 -0.08 -0.03 -0.02 -0.01    NA                  
## ORGN  0.03 -0.04  0.13  0.04  0.03  0.00  0.03 -0.08    NA            
## POTL  0.04  0.00  0.02  0.03 -0.01  0.01  0.01 -0.03  0.01    NA      
## RESM  0.02  0.09 -0.01 -0.05 -0.01 -0.05  0.00  0.04 -0.06 -0.02    NA
## SCON -0.06  0.20 -0.10 -0.09  0.05 -0.08 -0.07  0.24 -0.08 -0.05  0.06
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_V_3F_RMS <- FA_PA_V_3F$rms)
## [1] 0.07338105
(FA_PA_V_3F_TLI <- FA_PA_V_3F$TLI)
## [1] 0.6191606
(FA_PA_V_3F_BIC <- FA_PA_V_3F$BIC)
## [1] -22.76274
(FA_PA_V_3F_MaxResidual   <- max(abs(FA_PA_V_3F_Residual),na.rm=TRUE))
## [1] 0.2668687
(FA_PA_V_3F_HighResidual  <- sum(FA_PA_V_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 18
(FA_PA_V_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_V_3F_HighResidualRate <- FA_PA_V_3F_HighResidual/FA_PA_V_3F_TotalResidual)
## [1] 0.2727273
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_V_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 3,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_V_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Varimax rotation
# with 4 factors
##################################
(FA_PA_V_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="pa",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PA1   PA2  PA4  PA3   h2   u2 com
## ACAD 0.71  0.18 0.27 0.16 0.64 0.36 1.5
## APPR 0.23  0.27 0.70 0.17 0.65 0.35 1.7
## COMM 0.12  0.76 0.31 0.21 0.73 0.27 1.5
## CFIT 0.52  0.65 0.15 0.19 0.76 0.24 2.2
## EXPR 0.73 -0.03 0.18 0.33 0.68 0.32 1.5
## JFIT 0.61  0.53 0.17 0.21 0.73 0.27 2.4
## LETT 0.23  0.25 0.06 0.88 0.89 0.11 1.3
## LIKE 0.23  0.32 0.69 0.19 0.66 0.34 1.8
## ORGN 0.09  0.84 0.36 0.09 0.86 0.14 1.4
## POTL 0.85  0.26 0.29 0.12 0.89 0.11 1.5
## RESM 0.28  0.13 0.33 0.83 0.88 0.12 1.6
## SCON 0.27  0.21 0.82 0.09 0.79 0.21 1.4
## 
##                        PA1  PA2  PA4  PA3
## SS loadings           2.75 2.39 2.21 1.80
## Proportion Var        0.23 0.20 0.18 0.15
## Cumulative Var        0.23 0.43 0.61 0.76
## Proportion Explained  0.30 0.26 0.24 0.20
## Cumulative Proportion 0.30 0.56 0.80 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.47 
## 
## The root mean square of the residuals (RMSR) is  0.04 
## The df corrected root mean square of the residuals is  0.06 
## 
## The harmonic number of observations is  50 with the empirical chi square  9.84  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  60.87  with prob <  4.8e-05 
## 
## Tucker Lewis Index of factoring reliability =  0.732
## RMSEA index =  0.174  and the 90 % confidence intervals are  0.122 0.233
## BIC =  -33.02
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA4  PA3
## Correlation of (regression) scores with factors   0.94 0.93 0.91 0.95
## Multiple R square of scores with factors          0.89 0.87 0.82 0.91
## Minimum correlation of possible factor scores     0.78 0.74 0.65 0.82
(FA_PA_V_4F_Summary <- FA_PA_V_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | PA1  | PA2  | PA4  | PA3  | Complexity | Uniqueness
## --------------------------------------------------------------
## POTL     | 0.85 |      |      |      |    1.46    |    0.11   
## EXPR     | 0.73 |      |      |      |    1.53    |    0.32   
## ACAD     | 0.71 |      |      |      |    1.53    |    0.36   
## JFIT     | 0.61 |      |      |      |    2.38    |    0.27   
## ORGN     |      | 0.84 |      |      |    1.41    |    0.14   
## COMM     |      | 0.76 |      |      |    1.55    |    0.27   
## CFIT     |      | 0.65 |      |      |    2.22    |    0.24   
## SCON     |      |      | 0.82 |      |    1.39    |    0.21   
## APPR     |      |      | 0.70 |      |    1.67    |    0.35   
## LIKE     |      |      | 0.69 |      |    1.84    |    0.34   
## LETT     |      |      |      | 0.88 |    1.31    |    0.11   
## RESM     |      |      |      | 0.83 |    1.62    |    0.12   
## 
## The 4 latent factors (varimax rotation) accounted for 76.28% of the total variance of the original data (PA1 = 22.93%, PA2 = 19.92%, PA4 = 18.41%, PA3 = 15.03%).
summary(FA_PA_V_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA4 |   PA3
## ---------------------------------------------------------------
## Eigenvalues                     | 6.152 | 1.259 | 0.943 | 0.800
## Variance Explained              | 0.229 | 0.199 | 0.184 | 0.150
## Variance Explained (Cumulative) | 0.229 | 0.429 | 0.613 | 0.763
## Variance Explained (Proportion) | 0.301 | 0.261 | 0.241 | 0.197
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_V_4F_Residual <- residuals(FA_PA_V_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.04    NA                                                      
## COMM  0.07  0.01    NA                                                
## CFIT -0.06 -0.02 -0.05    NA                                          
## EXPR  0.05 -0.03  0.01 -0.05    NA                                    
## JFIT -0.07 -0.03 -0.07  0.15 -0.01    NA                              
## LETT -0.03 -0.01 -0.01  0.00  0.02  0.00    NA                        
## LIKE -0.03 -0.02 -0.03  0.02 -0.03  0.07  0.02    NA                  
## ORGN  0.03  0.02  0.08 -0.05  0.04 -0.06  0.01 -0.03    NA            
## POTL  0.05  0.03  0.01 -0.02  0.00 -0.03  0.01 -0.01  0.01    NA      
## RESM  0.02  0.03  0.02  0.01 -0.01 -0.01  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.06 -0.01 -0.03  0.04  0.04  0.03 -0.01  0.05 -0.01 -0.03 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_V_4F_RMS <- FA_PA_V_4F$rms)
## [1] 0.03861068
(FA_PA_V_4F_TLI <- FA_PA_V_4F$TLI)
## [1] 0.7317578
(FA_PA_V_4F_BIC <- FA_PA_V_4F$BIC)
## [1] -33.01886
(FA_PA_V_4F_MaxResidual   <- max(abs(FA_PA_V_4F_Residual),na.rm=TRUE))
## [1] 0.1504566
(FA_PA_V_4F_HighResidual  <- sum(FA_PA_V_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_PA_V_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_V_4F_HighResidualRate <- FA_PA_V_4F_HighResidual/FA_PA_V_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.87      0.87    0.85      0.69 6.7 0.034  6.9 1.4     0.62
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.79  0.87  0.92
## Duhachek  0.80  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## ORGN      0.74      0.74    0.59      0.59  2.9    0.073    NA  0.59
## COMM      0.77      0.77    0.62      0.62  3.3    0.066    NA  0.62
## CFIT      0.92      0.93    0.86      0.86 12.5    0.021    NA  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.93  0.93  0.91   0.83  6.9 1.6
## COMM 50  0.91  0.92  0.89   0.80  6.9 1.5
## CFIT 50  0.84  0.83  0.65   0.63  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_V_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 4,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_V_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Varimax rotation
# with 5 factors
##################################
(FA_PA_V_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="pa",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       PA5  PA4   PA2  PA3  PA1   h2    u2 com
## ACAD 0.82 0.21  0.21 0.14 0.14 0.79 0.208 1.4
## APPR 0.27 0.66  0.32 0.18 0.05 0.64 0.355 2.0
## COMM 0.14 0.25  0.83 0.21 0.19 0.86 0.143 1.5
## CFIT 0.29 0.21  0.38 0.20 0.74 0.86 0.144 2.2
## EXPR 0.70 0.17 -0.06 0.33 0.19 0.67 0.331 1.8
## JFIT 0.37 0.24  0.23 0.21 0.80 0.93 0.065 2.0
## LETT 0.17 0.07  0.18 0.89 0.21 0.89 0.105 1.3
## LIKE 0.16 0.72  0.25 0.19 0.24 0.69 0.306 1.8
## ORGN 0.09 0.32  0.83 0.08 0.26 0.89 0.115 1.6
## POTL 0.78 0.28  0.18 0.13 0.36 0.87 0.132 1.9
## RESM 0.28 0.31  0.13 0.82 0.10 0.87 0.127 1.6
## SCON 0.22 0.86  0.16 0.09 0.17 0.85 0.153 1.3
## 
##                        PA5  PA4  PA2  PA3  PA1
## SS loadings           2.26 2.21 1.90 1.82 1.63
## Proportion Var        0.19 0.18 0.16 0.15 0.14
## Cumulative Var        0.19 0.37 0.53 0.68 0.82
## Proportion Explained  0.23 0.23 0.19 0.19 0.17
## Cumulative Proportion 0.23 0.46 0.65 0.83 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.47 
## 
## The root mean square of the residuals (RMSR) is  0.01 
## The df corrected root mean square of the residuals is  0.03 
## 
## The harmonic number of observations is  50 with the empirical chi square  1.45  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  19.16  with prob <  0.26 
## 
## Tucker Lewis Index of factoring reliability =  0.965
## RMSEA index =  0.06  and the 90 % confidence intervals are  0 0.153
## BIC =  -43.43
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    PA5  PA4  PA2  PA3  PA1
## Correlation of (regression) scores with factors   0.92 0.92 0.94 0.95 0.94
## Multiple R square of scores with factors          0.85 0.85 0.88 0.91 0.88
## Minimum correlation of possible factor scores     0.71 0.70 0.77 0.82 0.76
(FA_PA_V_5F_Summary <- FA_PA_V_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | PA5  | PA4  | PA2  | PA3  | PA1  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.82 |      |      |      |      |    1.41    |    0.21   
## POTL     | 0.78 |      |      |      |      |    1.92    |    0.13   
## EXPR     | 0.70 |      |      |      |      |    1.77    |    0.33   
## SCON     |      | 0.86 |      |      |      |    1.32    |    0.15   
## LIKE     |      | 0.72 |      |      |      |    1.75    |    0.31   
## APPR     |      | 0.66 |      |      |      |    1.99    |    0.36   
## COMM     |      |      | 0.83 |      |      |    1.49    |    0.14   
## ORGN     |      |      | 0.83 |      |      |    1.57    |    0.11   
## LETT     |      |      |      | 0.89 |      |    1.29    |    0.11   
## RESM     |      |      |      | 0.82 |      |    1.63    |    0.13   
## JFIT     |      |      |      |      | 0.80 |    1.97    |    0.07   
## CFIT     |      |      |      |      | 0.74 |    2.24    |    0.14   
## 
## The 5 latent factors (varimax rotation) accounted for 81.80% of the total variance of the original data (PA5 = 18.81%, PA4 = 18.44%, PA2 = 15.86%, PA3 = 15.15%, PA1 = 13.55%).
summary(FA_PA_V_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA5 |   PA4 |   PA2 |   PA3 |   PA1
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.211 | 1.294 | 0.967 | 0.867 | 0.477
## Variance Explained              | 0.188 | 0.184 | 0.159 | 0.152 | 0.135
## Variance Explained (Cumulative) | 0.188 | 0.372 | 0.531 | 0.683 | 0.818
## Variance Explained (Proportion) | 0.230 | 0.225 | 0.194 | 0.185 | 0.166
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_V_5F_Residual <- residuals(FA_PA_V_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.01 -0.02    NA                                                
## CFIT  0.01  0.00  0.00    NA                                          
## EXPR  0.00 -0.04  0.00 -0.03    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.02 -0.01 -0.01  0.00  0.02 -0.01    NA                        
## LIKE  0.01  0.00  0.00 -0.02 -0.02  0.02  0.02    NA                  
## ORGN -0.01  0.01  0.00  0.00  0.02  0.00  0.02  0.00    NA            
## POTL -0.01  0.02 -0.01  0.01  0.01 -0.01  0.01  0.01  0.00    NA      
## RESM  0.01  0.03  0.01  0.02 -0.02  0.00  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.02 -0.01  0.01  0.01  0.05 -0.01 -0.01  0.01  0.01 -0.02 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_V_5F_RMS <- FA_PA_V_5F$rms)
## [1] 0.01483907
(FA_PA_V_5F_TLI <- FA_PA_V_5F$TLI)
## [1] 0.9648451
(FA_PA_V_5F_BIC <- FA_PA_V_5F$BIC)
## [1] -43.43181
(FA_PA_V_5F_MaxResidual   <- max(abs(FA_PA_V_5F_Residual),na.rm=TRUE))
## [1] 0.04835397
(FA_PA_V_5F_HighResidual  <- sum(FA_PA_V_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 0
(FA_PA_V_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_V_5F_HighResidualRate <- FA_PA_V_5F_HighResidual/FA_PA_V_5F_TotalResidual)
## [1] 0
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("COMM","ORGN")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("COMM", "ORGN")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_V_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 5,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_V_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_PA_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V : 3 Factors",
           cex=0.75)
fa.diagram(FA_PA_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V : 4 Factors",
           cex=0.75)
fa.diagram(FA_PA_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V : 5 Factors",
           cex=0.75)

1.6.2 Principal Axes Factor Extraction and Promax Rotation (FA_PA_P)




Code Chunk | Output
##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Promax rotation
# with 3 factors
##################################
(FA_PA_P_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="pa",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PA1   PA2   PA3   h2   u2 com
## ACAD  0.02  0.82 -0.06 0.65 0.35 1.0
## APPR  0.59  0.15  0.02 0.50 0.50 1.1
## COMM  0.91 -0.23  0.10 0.69 0.31 1.1
## CFIT  0.52  0.32  0.04 0.61 0.39 1.7
## EXPR -0.31  0.88  0.19 0.69 0.31 1.3
## JFIT  0.37  0.48  0.04 0.64 0.36 1.9
## LETT  0.03 -0.05  0.94 0.86 0.14 1.0
## LIKE  0.64  0.12  0.03 0.54 0.46 1.1
## ORGN  1.04 -0.24 -0.05 0.79 0.21 1.1
## POTL  0.08  0.95 -0.13 0.87 0.13 1.1
## RESM  0.07  0.09  0.82 0.83 0.17 1.0
## SCON  0.57  0.24 -0.07 0.51 0.49 1.4
## 
##                        PA1  PA2  PA3
## SS loadings           3.56 2.92 1.70
## Proportion Var        0.30 0.24 0.14
## Cumulative Var        0.30 0.54 0.68
## Proportion Explained  0.44 0.36 0.21
## Cumulative Proportion 0.44 0.79 1.00
## 
##  With factor correlations of 
##      PA1  PA2  PA3
## PA1 1.00 0.64 0.48
## PA2 0.64 1.00 0.55
## PA3 0.48 0.55 1.00
## 
## Mean item complexity =  1.2
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.52 
## 
## The root mean square of the residuals (RMSR) is  0.07 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  35.54  with prob <  0.35 
## The total number of observations was  50  with Likelihood Chi Square =  106.33  with prob <  1.2e-09 
## 
## Tucker Lewis Index of factoring reliability =  0.619
## RMSEA index =  0.21  and the 90 % confidence intervals are  0.168 0.259
## BIC =  -22.76
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA3
## Correlation of (regression) scores with factors   0.96 0.97 0.96
## Multiple R square of scores with factors          0.93 0.93 0.91
## Minimum correlation of possible factor scores     0.85 0.86 0.83
(FA_PA_P_3F_Summary <- FA_PA_P_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | PA1  | PA2  | PA3  | Complexity | Uniqueness
## -------------------------------------------------------
## ORGN     | 1.04 |      |      |    1.11    |    0.21   
## COMM     | 0.91 |      |      |    1.15    |    0.31   
## LIKE     | 0.64 |      |      |    1.07    |    0.46   
## APPR     | 0.59 |      |      |    1.13    |    0.50   
## SCON     | 0.57 |      |      |    1.37    |    0.49   
## CFIT     | 0.52 |      |      |    1.67    |    0.39   
## POTL     |      | 0.95 |      |    1.05    |    0.13   
## EXPR     |      | 0.88 |      |    1.34    |    0.31   
## ACAD     |      | 0.82 |      |    1.01    |    0.35   
## JFIT     |      | 0.48 |      |    1.91    |    0.36   
## LETT     |      |      | 0.94 |    1.01    |    0.14   
## RESM     |      |      | 0.82 |    1.04    |    0.17   
## 
## The 3 latent factors (promax rotation) accounted for 68.18% of the total variance of the original data (PA1 = 29.69%, PA2 = 24.31%, PA3 = 14.19%).
summary(FA_PA_P_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA3
## -------------------------------------------------------
## Eigenvalues                     | 6.069 | 1.209 | 0.903
## Variance Explained              | 0.297 | 0.243 | 0.142
## Variance Explained (Cumulative) | 0.297 | 0.540 | 0.682
## Variance Explained (Proportion) | 0.435 | 0.357 | 0.208
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_P_3F_Residual <- residuals(FA_PA_P_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.07 -0.06    NA                                                
## CFIT -0.04 -0.13  0.02    NA                                          
## EXPR  0.04 -0.02  0.00 -0.06    NA                                    
## JFIT -0.06 -0.12 -0.01  0.27 -0.01    NA                              
## LETT -0.02 -0.05  0.01  0.04  0.02  0.03    NA                        
## LIKE -0.04  0.12 -0.09 -0.08 -0.03 -0.02 -0.01    NA                  
## ORGN  0.03 -0.04  0.13  0.04  0.03  0.00  0.03 -0.08    NA            
## POTL  0.04  0.00  0.02  0.03 -0.01  0.01  0.01 -0.03  0.01    NA      
## RESM  0.02  0.09 -0.01 -0.05 -0.01 -0.05  0.00  0.04 -0.06 -0.02    NA
## SCON -0.06  0.20 -0.10 -0.09  0.05 -0.08 -0.07  0.24 -0.08 -0.05  0.06
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_P_3F_RMS <- FA_PA_P_3F$rms)
## [1] 0.07338105
(FA_PA_P_3F_TLI <- FA_PA_P_3F$TLI)
## [1] 0.6191606
(FA_PA_P_3F_BIC <- FA_PA_P_3F$BIC)
## [1] -22.76274
(FA_PA_P_3F_MaxResidual   <- max(abs(FA_PA_P_3F_Residual),na.rm=TRUE))
## [1] 0.2668687
(FA_PA_P_3F_HighResidual  <- sum(FA_PA_P_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 18
(FA_PA_P_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_P_3F_HighResidualRate <- FA_PA_P_3F_HighResidual/FA_PA_P_3F_TotalResidual)
## [1] 0.2727273
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_P_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 3,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_P_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Promax rotation
# with 4 factors
##################################
(FA_PA_P_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="pa",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PA1   PA2   PA4   PA3   h2   u2 com
## ACAD  0.77 -0.02  0.11 -0.04 0.64 0.36 1.0
## APPR  0.04  0.09  0.72  0.04 0.65 0.35 1.0
## COMM -0.14  0.82  0.11  0.10 0.73 0.27 1.1
## CFIT  0.44  0.64 -0.14  0.01 0.76 0.24 1.9
## EXPR  0.81 -0.28  0.03  0.19 0.68 0.32 1.4
## JFIT  0.57  0.46 -0.10  0.02 0.73 0.27 2.0
## LETT -0.01  0.14 -0.16  0.95 0.89 0.11 1.1
## LIKE  0.02  0.16  0.68  0.05 0.66 0.34 1.1
## ORGN -0.17  0.92  0.17 -0.05 0.86 0.14 1.1
## POTL  0.94  0.04  0.08 -0.13 0.89 0.11 1.1
## RESM  0.04 -0.08  0.20  0.85 0.88 0.12 1.1
## SCON  0.11 -0.01  0.87 -0.09 0.79 0.21 1.1
## 
##                        PA1  PA2  PA4  PA3
## SS loadings           2.85 2.47 2.09 1.74
## Proportion Var        0.24 0.21 0.17 0.15
## Cumulative Var        0.24 0.44 0.62 0.76
## Proportion Explained  0.31 0.27 0.23 0.19
## Cumulative Proportion 0.31 0.58 0.81 1.00
## 
##  With factor correlations of 
##      PA1  PA2  PA4  PA3
## PA1 1.00 0.53 0.52 0.54
## PA2 0.53 1.00 0.56 0.41
## PA4 0.52 0.56 1.00 0.42
## PA3 0.54 0.41 0.42 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.47 
## 
## The root mean square of the residuals (RMSR) is  0.04 
## The df corrected root mean square of the residuals is  0.06 
## 
## The harmonic number of observations is  50 with the empirical chi square  9.84  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  60.87  with prob <  4.8e-05 
## 
## Tucker Lewis Index of factoring reliability =  0.732
## RMSEA index =  0.174  and the 90 % confidence intervals are  0.122 0.233
## BIC =  -33.02
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    PA1  PA2  PA4  PA3
## Correlation of (regression) scores with factors   0.97 0.96 0.95 0.97
## Multiple R square of scores with factors          0.94 0.93 0.89 0.94
## Minimum correlation of possible factor scores     0.88 0.85 0.79 0.88
(FA_PA_P_4F_Summary <- FA_PA_P_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | PA1  | PA2  | PA4  | PA3  | Complexity | Uniqueness
## --------------------------------------------------------------
## POTL     | 0.94 |      |      |      |    1.06    |    0.11   
## EXPR     | 0.81 |      |      |      |    1.36    |    0.32   
## ACAD     | 0.77 |      |      |      |    1.05    |    0.36   
## JFIT     | 0.57 |      |      |      |    1.99    |    0.27   
## ORGN     |      | 0.92 |      |      |    1.14    |    0.14   
## COMM     |      | 0.82 |      |      |    1.13    |    0.27   
## CFIT     |      | 0.64 |      |      |    1.88    |    0.24   
## SCON     |      |      | 0.87 |      |    1.05    |    0.21   
## APPR     |      |      | 0.72 |      |    1.04    |    0.35   
## LIKE     |      |      | 0.68 |      |    1.12    |    0.34   
## LETT     |      |      |      | 0.95 |    1.11    |    0.11   
## RESM     |      |      |      | 0.85 |    1.13    |    0.12   
## 
## The 4 latent factors (promax rotation) accounted for 76.28% of the total variance of the original data (PA1 = 23.74%, PA2 = 20.58%, PA4 = 17.43%, PA3 = 14.53%).
summary(FA_PA_P_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA1 |   PA2 |   PA4 |   PA3
## ---------------------------------------------------------------
## Eigenvalues                     | 6.152 | 1.259 | 0.943 | 0.800
## Variance Explained              | 0.237 | 0.206 | 0.174 | 0.145
## Variance Explained (Cumulative) | 0.237 | 0.443 | 0.618 | 0.763
## Variance Explained (Proportion) | 0.311 | 0.270 | 0.229 | 0.190
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_P_4F_Residual <- residuals(FA_PA_P_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.04    NA                                                      
## COMM  0.07  0.01    NA                                                
## CFIT -0.06 -0.02 -0.05    NA                                          
## EXPR  0.05 -0.03  0.01 -0.05    NA                                    
## JFIT -0.07 -0.03 -0.07  0.15 -0.01    NA                              
## LETT -0.03 -0.01 -0.01  0.00  0.02  0.00    NA                        
## LIKE -0.03 -0.02 -0.03  0.02 -0.03  0.07  0.02    NA                  
## ORGN  0.03  0.02  0.08 -0.05  0.04 -0.06  0.01 -0.03    NA            
## POTL  0.05  0.03  0.01 -0.02  0.00 -0.03  0.01 -0.01  0.01    NA      
## RESM  0.02  0.03  0.02  0.01 -0.01 -0.01  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.06 -0.01 -0.03  0.04  0.04  0.03 -0.01  0.05 -0.01 -0.03 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_P_4F_RMS <- FA_PA_P_4F$rms)
## [1] 0.03861068
(FA_PA_P_4F_TLI <- FA_PA_P_4F$TLI)
## [1] 0.7317578
(FA_PA_P_4F_BIC <- FA_PA_P_4F$BIC)
## [1] -33.01886
(FA_PA_P_4F_MaxResidual   <- max(abs(FA_PA_P_4F_Residual),na.rm=TRUE))
## [1] 0.1504566
(FA_PA_P_4F_HighResidual  <- sum(FA_PA_P_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_PA_P_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_P_4F_HighResidualRate <- FA_PA_P_4F_HighResidual/FA_PA_P_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","EXPR","ACAD","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "EXPR", "ACAD", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.87      0.87    0.85      0.69 6.7 0.034  6.9 1.4     0.62
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.79  0.87  0.92
## Duhachek  0.80  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r  S/N alpha se var.r med.r
## ORGN      0.74      0.74    0.59      0.59  2.9    0.073    NA  0.59
## COMM      0.77      0.77    0.62      0.62  3.3    0.066    NA  0.62
## CFIT      0.92      0.93    0.86      0.86 12.5    0.021    NA  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.93  0.93  0.91   0.83  6.9 1.6
## COMM 50  0.91  0.92  0.89   0.80  6.9 1.5
## CFIT 50  0.84  0.83  0.65   0.63  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_P_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 4,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_P_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Principal Axes extraction
# and Promax rotation
# with 5 factors
##################################
(FA_PA_P_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="pa",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  pa
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "pa")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        PA5   PA4   PA2   PA1   PA3   h2    u2 com
## ACAD  0.95 -0.05  0.16 -0.10 -0.07 0.79 0.208 1.1
## APPR  0.13  0.67  0.18 -0.16  0.03 0.64 0.355 1.4
## COMM  0.04 -0.05  0.91 -0.01  0.10 0.86 0.143 1.0
## CFIT  0.02 -0.01  0.17  0.81  0.02 0.86 0.144 1.1
## EXPR  0.73  0.00 -0.21  0.05  0.20 0.67 0.331 1.3
## JFIT  0.08  0.05 -0.05  0.91  0.02 0.93 0.065 1.0
## LETT -0.06 -0.15  0.08  0.09  0.96 0.89 0.105 1.1
## LIKE -0.11  0.78  0.02  0.13  0.05 0.69 0.306 1.1
## ORGN -0.04  0.08  0.87  0.10 -0.05 0.89 0.115 1.1
## POTL  0.80  0.05  0.02  0.22 -0.11 0.87 0.132 1.2
## RESM  0.07  0.18 -0.02 -0.09  0.85 0.87 0.127 1.1
## SCON -0.01  1.00 -0.11  0.04 -0.09 0.85 0.153 1.0
## 
##                        PA5  PA4  PA2  PA1  PA3
## SS loadings           2.22 2.18 1.85 1.81 1.76
## Proportion Var        0.18 0.18 0.15 0.15 0.15
## Cumulative Var        0.18 0.37 0.52 0.67 0.82
## Proportion Explained  0.23 0.22 0.19 0.18 0.18
## Cumulative Proportion 0.23 0.45 0.64 0.82 1.00
## 
##  With factor correlations of 
##      PA5  PA4  PA2  PA1  PA3
## PA5 1.00 0.57 0.36 0.61 0.52
## PA4 0.57 1.00 0.59 0.52 0.45
## PA2 0.36 0.59 1.00 0.55 0.35
## PA1 0.61 0.52 0.55 1.00 0.46
## PA3 0.52 0.45 0.35 0.46 1.00
## 
## Mean item complexity =  1.1
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.47 
## 
## The root mean square of the residuals (RMSR) is  0.01 
## The df corrected root mean square of the residuals is  0.03 
## 
## The harmonic number of observations is  50 with the empirical chi square  1.45  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  19.16  with prob <  0.26 
## 
## Tucker Lewis Index of factoring reliability =  0.965
## RMSEA index =  0.06  and the 90 % confidence intervals are  0 0.153
## BIC =  -43.43
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    PA5  PA4  PA2  PA1  PA3
## Correlation of (regression) scores with factors   0.96 0.96 0.97 0.97 0.97
## Multiple R square of scores with factors          0.92 0.92 0.93 0.95 0.94
## Minimum correlation of possible factor scores     0.85 0.84 0.86 0.90 0.88
(FA_PA_P_5F_Summary <- FA_PA_P_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | PA5  | PA4  | PA2  | PA1  | PA3  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.95 |      |      |      |      |    1.10    |    0.21   
## POTL     | 0.80 |      |      |      |      |    1.20    |    0.13   
## EXPR     | 0.73 |      |      |      |      |    1.32    |    0.33   
## SCON     |      | 1.00 |      |      |      |    1.04    |    0.15   
## LIKE     |      | 0.78 |      |      |      |    1.10    |    0.31   
## APPR     |      | 0.67 |      |      |      |    1.35    |    0.36   
## COMM     |      |      | 0.91 |      |      |    1.04    |    0.14   
## ORGN     |      |      | 0.87 |      |      |    1.05    |    0.11   
## JFIT     |      |      |      | 0.91 |      |    1.03    |    0.07   
## CFIT     |      |      |      | 0.81 |      |    1.09    |    0.14   
## LETT     |      |      |      |      | 0.96 |    1.09    |    0.11   
## RESM     |      |      |      |      | 0.85 |    1.12    |    0.13   
## 
## The 5 latent factors (promax rotation) accounted for 81.80% of the total variance of the original data (PA5 = 18.48%, PA4 = 18.16%, PA2 = 15.39%, PA1 = 15.12%, PA3 = 14.65%).
summary(FA_PA_P_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   PA5 |   PA4 |   PA2 |   PA1 |   PA3
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.211 | 1.294 | 0.967 | 0.867 | 0.477
## Variance Explained              | 0.185 | 0.182 | 0.154 | 0.151 | 0.147
## Variance Explained (Cumulative) | 0.185 | 0.366 | 0.520 | 0.672 | 0.818
## Variance Explained (Proportion) | 0.226 | 0.222 | 0.188 | 0.185 | 0.179
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_PA_P_5F_Residual <- residuals(FA_PA_P_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.01 -0.02    NA                                                
## CFIT  0.01  0.00  0.00    NA                                          
## EXPR  0.00 -0.04  0.00 -0.03    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.02 -0.01 -0.01  0.00  0.02 -0.01    NA                        
## LIKE  0.01  0.00  0.00 -0.02 -0.02  0.02  0.02    NA                  
## ORGN -0.01  0.01  0.00  0.00  0.02  0.00  0.02  0.00    NA            
## POTL -0.01  0.02 -0.01  0.01  0.01 -0.01  0.01  0.01  0.00    NA      
## RESM  0.01  0.03  0.01  0.02 -0.02  0.00  0.00 -0.01 -0.03 -0.01    NA
## SCON -0.02 -0.01  0.01  0.01  0.05 -0.01 -0.01  0.01  0.01 -0.02 -0.01
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_PA_P_5F_RMS <- FA_PA_P_5F$rms)
## [1] 0.01483907
(FA_PA_P_5F_TLI <- FA_PA_P_5F$TLI)
## [1] 0.9648451
(FA_PA_P_5F_BIC <- FA_PA_P_5F$BIC)
## [1] -43.43181
(FA_PA_P_5F_MaxResidual   <- max(abs(FA_PA_P_5F_Residual),na.rm=TRUE))
## [1] 0.04835397
(FA_PA_P_5F_HighResidual  <- sum(FA_PA_P_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 0
(FA_PA_P_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_PA_P_5F_HighResidualRate <- FA_PA_P_5F_HighResidual/FA_PA_P_5F_TotalResidual)
## [1] 0
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_PA_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("COMM","ORGN")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("COMM", "ORGN")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
alpha(DPA.Descriptors.Numeric[,c("LETT","RESM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("LETT", "RESM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_PA_P_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "prax",
                                  nfac = 5,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_PA_P_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_PA_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_P : 3 Factors",
           cex=0.75)
fa.diagram(FA_PA_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_P : 4 Factors",
           cex=0.75)
fa.diagram(FA_PA_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_PA_P : 5 Factors",
           cex=0.75)

1.6.3 Maximum Likelihood Factor Extraction and Varimax Rotation (FA_ML_V)




Code Chunk | Output
##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Varimax rotation
# with 3 factors
##################################
(FA_ML_V_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="ml",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       ML3  ML2  ML1   h2    u2 com
## ACAD 0.76 0.24 0.20 0.67 0.326 1.3
## APPR 0.36 0.48 0.32 0.46 0.543 2.7
## COMM 0.16 0.85 0.23 0.80 0.203 1.2
## CFIT 0.53 0.56 0.19 0.62 0.377 2.2
## EXPR 0.71 0.04 0.32 0.61 0.385 1.4
## JFIT 0.62 0.45 0.21 0.62 0.379 2.1
## LETT 0.22 0.25 0.78 0.71 0.289 1.4
## LIKE 0.35 0.48 0.29 0.44 0.563 2.6
## ORGN 0.15 0.96 0.07 0.96 0.043 1.1
## POTL 0.90 0.29 0.14 0.92 0.079 1.3
## RESM 0.30 0.19 0.93 1.00 0.005 1.3
## SCON 0.39 0.43 0.25 0.40 0.597 2.6
## 
##                        ML3  ML2  ML1
## SS loadings           3.15 3.04 2.02
## Proportion Var        0.26 0.25 0.17
## Cumulative Var        0.26 0.52 0.68
## Proportion Explained  0.38 0.37 0.25
## Cumulative Proportion 0.38 0.75 1.00
## 
## Mean item complexity =  1.8
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.22 
## 
## The root mean square of the residuals (RMSR) is  0.08 
## The df corrected root mean square of the residuals is  0.11 
## 
## The harmonic number of observations is  50 with the empirical chi square  41.84  with prob <  0.14 
## The total number of observations was  50  with Likelihood Chi Square =  93.49  with prob <  1.1e-07 
## 
## Tucker Lewis Index of factoring reliability =  0.686
## RMSEA index =  0.19  and the 90 % confidence intervals are  0.148 0.24
## BIC =  -35.6
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    ML3  ML2  ML1
## Correlation of (regression) scores with factors   0.96 0.98 0.99
## Multiple R square of scores with factors          0.92 0.96 0.99
## Minimum correlation of possible factor scores     0.84 0.92 0.97
(FA_ML_V_3F_Summary <- FA_ML_V_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | ML3  | ML2  | ML1  | Complexity | Uniqueness
## -------------------------------------------------------
## POTL     | 0.90 |      |      |    1.25    |    0.08   
## ACAD     | 0.76 |      |      |    1.35    |    0.33   
## EXPR     | 0.71 |      |      |    1.39    |    0.39   
## JFIT     | 0.62 |      |      |    2.09    |    0.38   
## ORGN     |      | 0.96 |      |    1.06    |    0.04   
## COMM     |      | 0.85 |      |    1.22    |    0.20   
## CFIT     |      | 0.56 |      |    2.24    |    0.38   
## LIKE     |      | 0.48 |      |    2.56    |    0.56   
## APPR     |      | 0.48 |      |    2.67    |    0.54   
## SCON     |      | 0.43 |      |    2.60    |    0.60   
## RESM     |      |      | 0.93 |    1.29    |  4.98e-03 
## LETT     |      |      | 0.78 |    1.38    |    0.29   
## 
## The 3 latent factors (varimax rotation) accounted for 68.42% of the total variance of the original data (ML3 = 26.22%, ML2 = 25.33%, ML1 = 16.87%).
summary(FA_ML_V_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML2 |   ML1
## -------------------------------------------------------
## Eigenvalues                     | 6.079 | 1.261 | 0.922
## Variance Explained              | 0.262 | 0.253 | 0.169
## Variance Explained (Cumulative) | 0.262 | 0.515 | 0.684
## Variance Explained (Proportion) | 0.383 | 0.370 | 0.247
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_V_3F_Residual <- residuals(FA_ML_V_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.02    NA                                                      
## COMM  0.04 -0.04    NA                                                
## CFIT -0.07 -0.10 -0.01    NA                                          
## EXPR  0.05 -0.07 -0.02 -0.06    NA                                    
## JFIT -0.08 -0.09 -0.02  0.27  0.00    NA                              
## LETT -0.06 -0.14 -0.02  0.05  0.06  0.06    NA                        
## LIKE -0.04  0.19 -0.04 -0.02 -0.06  0.04 -0.06    NA                  
## ORGN  0.00  0.00  0.00 -0.01  0.01 -0.01  0.01 -0.01    NA            
## POTL  0.01  0.01  0.00  0.00  0.00 -0.01  0.00 -0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.04  0.27 -0.05 -0.03  0.03 -0.02 -0.15  0.34  0.00 -0.01  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_V_3F_RMS <- FA_ML_V_3F$rms)
## [1] 0.07961754
(FA_ML_V_3F_TLI <- FA_ML_V_3F$TLI)
## [1] 0.6858498
(FA_ML_V_3F_BIC <- FA_ML_V_3F$BIC)
## [1] -35.60434
(FA_ML_V_3F_MaxResidual   <- max(abs(FA_ML_V_3F_Residual),na.rm=TRUE))
## [1] 0.3363878
(FA_ML_V_3F_HighResidual  <- sum(FA_ML_V_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 16
(FA_ML_V_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_V_3F_HighResidualRate <- FA_ML_V_3F_HighResidual/FA_ML_V_3F_TotalResidual)
## [1] 0.2424242
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","ACAD","EXPR","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "ACAD", "EXPR", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_V_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 3,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_V_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Varimax rotation
# with 4 factors
##################################
(FA_ML_V_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="ml",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       ML3  ML4   ML2  ML1   h2    u2 com
## ACAD 0.49 0.38  0.12 0.24 0.45 0.546 2.5
## APPR 0.18 0.72  0.29 0.22 0.68 0.325 1.7
## COMM 0.21 0.26  0.79 0.23 0.79 0.206 1.6
## CFIT 0.78 0.16  0.42 0.19 0.85 0.148 1.8
## EXPR 0.50 0.30 -0.07 0.35 0.46 0.535 2.6
## JFIT 0.87 0.19  0.29 0.19 0.91 0.089 1.4
## LETT 0.27 0.06  0.22 0.81 0.78 0.224 1.4
## LIKE 0.31 0.67  0.27 0.17 0.65 0.350 1.9
## ORGN 0.23 0.30  0.91 0.06 0.97 0.027 1.4
## POTL 0.66 0.40  0.15 0.18 0.65 0.347 1.9
## RESM 0.22 0.33  0.10 0.91 1.00 0.005 1.4
## SCON 0.27 0.81  0.19 0.10 0.78 0.220 1.4
## 
##                        ML3  ML4  ML2  ML1
## SS loadings           2.71 2.36 2.00 1.91
## Proportion Var        0.23 0.20 0.17 0.16
## Cumulative Var        0.23 0.42 0.59 0.75
## Proportion Explained  0.30 0.26 0.22 0.21
## Cumulative Proportion 0.30 0.56 0.79 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.36 
## 
## The root mean square of the residuals (RMSR) is  0.06 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  22.17  with prob <  0.57 
## The total number of observations was  50  with Likelihood Chi Square =  56.38  with prob <  2e-04 
## 
## Tucker Lewis Index of factoring reliability =  0.764
## RMSEA index =  0.163  and the 90 % confidence intervals are  0.11 0.223
## BIC =  -37.51
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    ML3  ML4  ML2  ML1
## Correlation of (regression) scores with factors   0.95 0.91 0.97 0.99
## Multiple R square of scores with factors          0.91 0.83 0.95 0.98
## Minimum correlation of possible factor scores     0.82 0.65 0.90 0.95
(FA_ML_V_4F_Summary <- FA_ML_V_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | ML3  | ML4  | ML2  | ML1  | Complexity | Uniqueness
## --------------------------------------------------------------
## JFIT     | 0.87 |      |      |      |    1.43    |    0.09   
## CFIT     | 0.78 |      |      |      |    1.79    |    0.15   
## POTL     | 0.66 |      |      |      |    1.94    |    0.35   
## EXPR     | 0.50 |      |      |      |    2.56    |    0.54   
## ACAD     | 0.49 |      |      |      |    2.54    |    0.55   
## SCON     |      | 0.81 |      |      |    1.37    |    0.22   
## APPR     |      | 0.72 |      |      |    1.66    |    0.32   
## LIKE     |      | 0.67 |      |      |    1.90    |    0.35   
## ORGN     |      |      | 0.91 |      |    1.37    |    0.03   
## COMM     |      |      | 0.79 |      |    1.58    |    0.21   
## RESM     |      |      |      | 0.91 |    1.41    |  5.00e-03 
## LETT     |      |      |      | 0.81 |    1.39    |    0.22   
## 
## The 4 latent factors (varimax rotation) accounted for 74.82% of the total variance of the original data (ML3 = 22.58%, ML4 = 19.64%, ML2 = 16.70%, ML1 = 15.90%).
summary(FA_ML_V_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML4 |   ML2 |   ML1
## ---------------------------------------------------------------
## Eigenvalues                     | 6.146 | 1.248 | 0.890 | 0.846
## Variance Explained              | 0.226 | 0.196 | 0.167 | 0.159
## Variance Explained (Cumulative) | 0.226 | 0.422 | 0.589 | 0.748
## Variance Explained (Proportion) | 0.302 | 0.263 | 0.223 | 0.212
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_V_4F_Residual <- residuals(FA_ML_V_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.05 -0.01    NA                                                
## CFIT -0.04  0.00  0.00    NA                                          
## EXPR  0.24 -0.05 -0.02 -0.08    NA                                    
## JFIT -0.04  0.00  0.00  0.01 -0.01    NA                              
## LETT -0.04 -0.03 -0.03 -0.01  0.06  0.00    NA                        
## LIKE -0.08 -0.01  0.00 -0.01 -0.09  0.03  0.04    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.26  0.03  0.02 -0.02  0.20 -0.02  0.00 -0.05  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.08 -0.01 -0.01  0.02  0.00  0.00 -0.01  0.05  0.00 -0.05  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_V_4F_RMS <- FA_ML_V_4F$rms)
## [1] 0.05795189
(FA_ML_V_4F_TLI <- FA_ML_V_4F$TLI)
## [1] 0.7644223
(FA_ML_V_4F_BIC <- FA_ML_V_4F$BIC)
## [1] -37.50857
(FA_ML_V_4F_MaxResidual   <- max(abs(FA_ML_V_4F_Residual),na.rm=TRUE))
## [1] 0.2590579
(FA_ML_V_4F_HighResidual  <- sum(FA_ML_V_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_ML_V_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_V_4F_HighResidualRate <- FA_ML_V_4F_HighResidual/FA_ML_V_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT","POTL","EXPR","ACAD")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT", "POTL", 
##     "EXPR", "ACAD")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##        0.9       0.9    0.92      0.64 8.8 0.024  7.2 1.2     0.66
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84   0.9  0.94
## Duhachek  0.85   0.9  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.86      0.87    0.86      0.62 6.5    0.034 0.021  0.66
## CFIT      0.88      0.88    0.87      0.66 7.6    0.028 0.011  0.69
## POTL      0.85      0.85    0.88      0.58 5.6    0.036 0.029  0.53
## EXPR      0.89      0.89    0.91      0.68 8.5    0.025 0.022  0.68
## ACAD      0.88      0.88    0.90      0.64 7.3    0.029 0.028  0.68
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.88  0.87  0.86   0.80  7.0 1.6
## CFIT 50  0.84  0.82  0.80   0.72  6.9 1.6
## POTL 50  0.91  0.92  0.90   0.85  7.3 1.4
## EXPR 50  0.76  0.78  0.71   0.64  7.3 1.4
## ACAD 50  0.81  0.83  0.78   0.72  7.4 1.3
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_V_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 4,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_V_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Varimax rotation
# with 5 factors
##################################
(FA_ML_V_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="ml",
              rotate = "varimax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "varimax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       ML5  ML4   ML2  ML1  ML3   h2    u2 com
## ACAD 0.81 0.20  0.20 0.17 0.14 0.78 0.218 1.4
## APPR 0.28 0.65  0.31 0.21 0.05 0.65 0.353 2.1
## COMM 0.14 0.25  0.79 0.24 0.20 0.80 0.196 1.6
## CFIT 0.30 0.22  0.37 0.21 0.72 0.85 0.154 2.3
## EXPR 0.69 0.19 -0.04 0.29 0.20 0.64 0.362 1.7
## JFIT 0.37 0.23  0.23 0.21 0.81 0.95 0.050 1.9
## LETT 0.19 0.07  0.20 0.81 0.21 0.77 0.229 1.4
## LIKE 0.17 0.71  0.24 0.18 0.25 0.68 0.319 1.8
## ORGN 0.10 0.31  0.89 0.07 0.25 0.96 0.035 1.5
## POTL 0.79 0.27  0.18 0.12 0.35 0.87 0.132 1.8
## RESM 0.27 0.30  0.10 0.90 0.10 1.00 0.005 1.5
## SCON 0.22 0.87  0.17 0.09 0.16 0.87 0.130 1.3
## 
##                        ML5  ML4  ML2  ML1  ML3
## SS loadings           2.29 2.18 1.92 1.82 1.61
## Proportion Var        0.19 0.18 0.16 0.15 0.13
## Cumulative Var        0.19 0.37 0.53 0.68 0.82
## Proportion Explained  0.23 0.22 0.20 0.19 0.16
## Cumulative Proportion 0.23 0.45 0.65 0.84 1.00
## 
## Mean item complexity =  1.7
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.42 
## 
## The root mean square of the residuals (RMSR) is  0.02 
## The df corrected root mean square of the residuals is  0.04 
## 
## The harmonic number of observations is  50 with the empirical chi square  2.44  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  17.27  with prob <  0.37 
## 
## Tucker Lewis Index of factoring reliability =  0.986
## RMSEA index =  0.034  and the 90 % confidence intervals are  0 0.141
## BIC =  -45.32
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    ML5  ML4  ML2  ML1  ML3
## Correlation of (regression) scores with factors   0.92 0.93 0.97 0.99 0.95
## Multiple R square of scores with factors          0.85 0.86 0.94 0.98 0.90
## Minimum correlation of possible factor scores     0.71 0.72 0.88 0.96 0.80
(FA_ML_V_5F_Summary <- FA_ML_V_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (varimax-rotation)
## 
## Variable | ML5  | ML4  | ML2  | ML1  | ML3  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.81 |      |      |      |      |    1.40    |    0.22   
## POTL     | 0.79 |      |      |      |      |    1.84    |    0.13   
## EXPR     | 0.69 |      |      |      |      |    1.71    |    0.36   
## SCON     |      | 0.87 |      |      |      |    1.30    |    0.13   
## LIKE     |      | 0.71 |      |      |      |    1.81    |    0.32   
## APPR     |      | 0.65 |      |      |      |    2.14    |    0.35   
## ORGN     |      |      | 0.89 |      |      |    1.45    |    0.04   
## COMM     |      |      | 0.79 |      |      |    1.62    |    0.20   
## RESM     |      |      |      | 0.90 |      |    1.47    |  4.99e-03 
## LETT     |      |      |      | 0.81 |      |    1.40    |    0.23   
## JFIT     |      |      |      |      | 0.81 |    1.94    |    0.05   
## CFIT     |      |      |      |      | 0.72 |    2.34    |    0.15   
## 
## The 5 latent factors (varimax rotation) accounted for 81.81% of the total variance of the original data (ML5 = 19.05%, ML4 = 18.17%, ML2 = 15.99%, ML1 = 15.16%, ML3 = 13.44%).
summary(FA_ML_V_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML5 |   ML4 |   ML2 |   ML1 |   ML3
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.215 | 1.301 | 0.958 | 0.877 | 0.477
## Variance Explained              | 0.190 | 0.182 | 0.160 | 0.152 | 0.134
## Variance Explained (Cumulative) | 0.190 | 0.372 | 0.532 | 0.684 | 0.818
## Variance Explained (Proportion) | 0.233 | 0.222 | 0.195 | 0.185 | 0.164
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_V_5F_Residual <- residuals(FA_ML_V_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.02 -0.01    NA                                                
## CFIT  0.00  0.00  0.00    NA                                          
## EXPR  0.00 -0.07 -0.03 -0.05    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.04 -0.04 -0.03 -0.01  0.07  0.00    NA                        
## LIKE  0.01  0.01  0.01 -0.03 -0.04  0.01  0.03    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.00  0.01  0.00  0.01  0.01  0.00  0.01  0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.01 -0.01  0.00  0.01  0.04  0.00 -0.01  0.00  0.00  0.00  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_V_5F_RMS <- FA_ML_V_5F$rms)
## [1] 0.01923904
(FA_ML_V_5F_TLI <- FA_ML_V_5F$TLI)
## [1] 0.9858829
(FA_ML_V_5F_BIC <- FA_ML_V_5F$BIC)
## [1] -45.32318
(FA_ML_V_5F_MaxResidual   <- max(abs(FA_ML_V_5F_Residual),na.rm=TRUE))
## [1] 0.0733741
(FA_ML_V_5F_HighResidual  <- sum(FA_ML_V_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 2
(FA_ML_V_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_V_5F_HighResidualRate <- FA_ML_V_5F_HighResidual/FA_ML_V_5F_TotalResidual)
## [1] 0.03030303
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_V",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_V_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 5,
                                  rotation = "varimax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_V_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_ML_V_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_V : 3 Factors",
           cex=0.75)
fa.diagram(FA_ML_V_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_V : 4 Factors",
           cex=0.75)
fa.diagram(FA_ML_V_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_V : 5 Factors",
           cex=0.75)

1.6.4 Maximum Likelihood Factor Extraction and Promax Rotation (FA_ML_P)




Code Chunk | Output
##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Promax rotation
# with 3 factors
##################################
(FA_ML_P_3F <- fa(DPA.Descriptors.Numeric,
              nfactors = 3,
              fm="ml",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 3, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        ML3   ML2   ML1   h2    u2 com
## ACAD  0.88 -0.04 -0.05 0.67 0.326 1.0
## APPR  0.19  0.40  0.19 0.46 0.543 1.9
## COMM -0.20  0.99  0.05 0.80 0.203 1.1
## CFIT  0.44  0.47 -0.05 0.62 0.377 2.0
## EXPR  0.85 -0.32  0.17 0.61 0.385 1.4
## JFIT  0.60  0.28 -0.04 0.62 0.379 1.4
## LETT -0.08  0.04  0.87 0.71 0.289 1.0
## LIKE  0.19  0.41  0.15 0.44 0.563 1.7
## ORGN -0.20  1.18 -0.18 0.96 0.043 1.1
## POTL  1.08 -0.02 -0.18 0.92 0.079 1.1
## RESM -0.02 -0.10  1.06 1.00 0.005 1.0
## SCON  0.28  0.35  0.09 0.40 0.597 2.1
## 
##                        ML3  ML2  ML1
## SS loadings           3.27 3.05 1.89
## Proportion Var        0.27 0.25 0.16
## Cumulative Var        0.27 0.53 0.68
## Proportion Explained  0.40 0.37 0.23
## Cumulative Proportion 0.40 0.77 1.00
## 
##  With factor correlations of 
##      ML3  ML2  ML1
## ML3 1.00 0.67 0.64
## ML2 0.67 1.00 0.58
## ML1 0.64 0.58 1.00
## 
## Mean item complexity =  1.4
## Test of the hypothesis that 3 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 33  and the objective function was  2.22 
## 
## The root mean square of the residuals (RMSR) is  0.08 
## The df corrected root mean square of the residuals is  0.11 
## 
## The harmonic number of observations is  50 with the empirical chi square  41.84  with prob <  0.14 
## The total number of observations was  50  with Likelihood Chi Square =  93.49  with prob <  1.1e-07 
## 
## Tucker Lewis Index of factoring reliability =  0.686
## RMSEA index =  0.19  and the 90 % confidence intervals are  0.148 0.24
## BIC =  -35.6
## Fit based upon off diagonal values = 0.98
## Measures of factor score adequacy             
##                                                    ML3  ML2  ML1
## Correlation of (regression) scores with factors   0.98 0.99 1.00
## Multiple R square of scores with factors          0.96 0.97 1.00
## Minimum correlation of possible factor scores     0.91 0.95 0.99
(FA_ML_P_3F_Summary <- FA_ML_P_3F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | ML3  | ML2  | ML1  | Complexity | Uniqueness
## -------------------------------------------------------
## POTL     | 1.08 |      |      |    1.06    |    0.08   
## ACAD     | 0.88 |      |      |    1.01    |    0.33   
## EXPR     | 0.85 |      |      |    1.36    |    0.39   
## JFIT     | 0.60 |      |      |    1.44    |    0.38   
## ORGN     |      | 1.18 |      |    1.10    |    0.04   
## COMM     |      | 0.99 |      |    1.09    |    0.20   
## CFIT     |      | 0.47 |      |    2.02    |    0.38   
## LIKE     |      | 0.41 |      |    1.70    |    0.56   
## APPR     |      | 0.40 |      |    1.90    |    0.54   
## SCON     |      | 0.35 |      |    2.08    |    0.60   
## RESM     |      |      | 1.06 |    1.02    |  4.98e-03 
## LETT     |      |      | 0.87 |    1.02    |    0.29   
## 
## The 3 latent factors (promax rotation) accounted for 68.42% of the total variance of the original data (ML3 = 27.29%, ML2 = 25.39%, ML1 = 15.75%).
summary(FA_ML_P_3F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML2 |   ML1
## -------------------------------------------------------
## Eigenvalues                     | 6.079 | 1.261 | 0.922
## Variance Explained              | 0.273 | 0.254 | 0.157
## Variance Explained (Cumulative) | 0.273 | 0.527 | 0.684
## Variance Explained (Proportion) | 0.399 | 0.371 | 0.230
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_P_3F_Residual <- residuals(FA_ML_P_3F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.02    NA                                                      
## COMM  0.04 -0.04    NA                                                
## CFIT -0.07 -0.10 -0.01    NA                                          
## EXPR  0.05 -0.07 -0.02 -0.06    NA                                    
## JFIT -0.08 -0.09 -0.02  0.27  0.00    NA                              
## LETT -0.06 -0.14 -0.02  0.05  0.06  0.06    NA                        
## LIKE -0.04  0.19 -0.04 -0.02 -0.06  0.04 -0.06    NA                  
## ORGN  0.00  0.00  0.00 -0.01  0.01 -0.01  0.01 -0.01    NA            
## POTL  0.01  0.01  0.00  0.00  0.00 -0.01  0.00 -0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.04  0.27 -0.05 -0.03  0.03 -0.02 -0.15  0.34  0.00 -0.01  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_P_3F_RMS <- FA_ML_P_3F$rms)
## [1] 0.07961754
(FA_ML_P_3F_TLI <- FA_ML_P_3F$TLI)
## [1] 0.6858498
(FA_ML_P_3F_BIC <- FA_ML_P_3F$BIC)
## [1] -35.60434
(FA_ML_P_3F_MaxResidual   <- max(abs(FA_ML_P_3F_Residual),na.rm=TRUE))
## [1] 0.3363878
(FA_ML_P_3F_HighResidual  <- sum(FA_ML_P_3F_Residual>abs(0.05),na.rm=TRUE))
## [1] 16
(FA_ML_P_3F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_P_3F_HighResidualRate <- FA_ML_P_3F_HighResidual/FA_ML_P_3F_TotalResidual)
## [1] 0.2424242
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_P",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("POTL","ACAD","EXPR","JFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("POTL", "ACAD", "EXPR", 
##     "JFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.88    0.87      0.66 7.6 0.028  7.3 1.2     0.69
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.81  0.88  0.93
## Duhachek  0.82  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se  var.r med.r
## POTL      0.79      0.80    0.74      0.58 4.1    0.051 0.0063  0.54
## ACAD      0.84      0.84    0.80      0.64 5.4    0.040 0.0111  0.70
## EXPR      0.86      0.86    0.84      0.68 6.4    0.036 0.0169  0.71
## JFIT      0.89      0.89    0.85      0.72 7.8    0.028 0.0043  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## POTL 50  0.93  0.93  0.92   0.87  7.3 1.4
## ACAD 50  0.86  0.87  0.83   0.76  7.4 1.3
## EXPR 50  0.83  0.84  0.75   0.71  7.3 1.4
## JFIT 50  0.82  0.80  0.71   0.65  7.0 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM","LIKE","APPR","SCON","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM", "LIKE", 
##     "APPR", "SCON", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.88      0.89     0.9      0.57 7.8 0.026  7.1 1.1     0.53
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.88  0.92
## Duhachek  0.83  0.88  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.84      0.86    0.85      0.55 6.0    0.036 0.014  0.49
## COMM      0.85      0.87    0.86      0.56 6.4    0.034 0.012  0.53
## LIKE      0.86      0.86    0.88      0.56 6.4    0.030 0.019  0.52
## APPR      0.86      0.87    0.89      0.57 6.7    0.030 0.019  0.51
## SCON      0.86      0.87    0.87      0.57 6.5    0.029 0.015  0.53
## CFIT      0.87      0.88    0.90      0.59 7.3    0.029 0.020  0.53
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.87  0.84  0.84   0.78  6.9 1.6
## COMM 50  0.84  0.81  0.79   0.74  6.9 1.5
## LIKE 50  0.78  0.81  0.77   0.69  7.4 1.1
## APPR 50  0.75  0.79  0.73   0.67  7.4 1.0
## SCON 50  0.76  0.80  0.76   0.67  7.3 1.2
## CFIT 50  0.78  0.75  0.66   0.64  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.10 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.20 0.30 0.28 0.06 0.02    0
## LIKE 0.00 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## SCON 0.00 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_P_3F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 3,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_P_3F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Promax rotation
# with 4 factors
##################################
(FA_ML_P_4F <- fa(DPA.Descriptors.Numeric,
              nfactors = 4,
              fm="ml",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 4, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        ML3   ML4   ML1   ML2   h2    u2 com
## ACAD  0.44  0.26  0.07 -0.03 0.45 0.546 1.7
## APPR -0.13  0.80  0.07  0.15 0.68 0.325 1.1
## COMM  0.03  0.10  0.16  0.76 0.79 0.206 1.1
## CFIT  0.91 -0.18 -0.04  0.28 0.85 0.148 1.3
## EXPR  0.47  0.16  0.22 -0.24 0.46 0.535 2.2
## JFIT  1.04 -0.16 -0.07  0.11 0.91 0.089 1.1
## LETT  0.06 -0.21  0.90  0.14 0.78 0.224 1.2
## LIKE  0.09  0.70 -0.02  0.11 0.65 0.350 1.1
## ORGN  0.08  0.16 -0.06  0.89 0.97 0.027 1.1
## POTL  0.70  0.22 -0.06 -0.04 0.65 0.347 1.2
## RESM -0.12  0.15  0.99 -0.03 1.00 0.005 1.1
## SCON  0.01  0.93 -0.12  0.01 0.78 0.220 1.0
## 
##                        ML3  ML4  ML1  ML2
## SS loadings           2.93 2.36 1.85 1.84
## Proportion Var        0.24 0.20 0.15 0.15
## Cumulative Var        0.24 0.44 0.60 0.75
## Proportion Explained  0.33 0.26 0.21 0.20
## Cumulative Proportion 0.33 0.59 0.80 1.00
## 
##  With factor correlations of 
##      ML3  ML4  ML1  ML2
## ML3 1.00 0.66 0.60 0.40
## ML4 0.66 1.00 0.53 0.41
## ML1 0.60 0.53 1.00 0.27
## ML2 0.40 0.41 0.27 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 24  and the objective function was  1.36 
## 
## The root mean square of the residuals (RMSR) is  0.06 
## The df corrected root mean square of the residuals is  0.1 
## 
## The harmonic number of observations is  50 with the empirical chi square  22.17  with prob <  0.57 
## The total number of observations was  50  with Likelihood Chi Square =  56.38  with prob <  2e-04 
## 
## Tucker Lewis Index of factoring reliability =  0.764
## RMSEA index =  0.163  and the 90 % confidence intervals are  0.11 0.223
## BIC =  -37.51
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy             
##                                                    ML3  ML4  ML1  ML2
## Correlation of (regression) scores with factors   0.98 0.95 1.00 0.98
## Multiple R square of scores with factors          0.95 0.90 0.99 0.97
## Minimum correlation of possible factor scores     0.90 0.81 0.99 0.93
(FA_ML_P_4F_Summary <- FA_ML_P_4F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | ML3  | ML4  | ML1  | ML2  | Complexity | Uniqueness
## --------------------------------------------------------------
## JFIT     | 1.04 |      |      |      |    1.08    |    0.09   
## CFIT     | 0.91 |      |      |      |    1.27    |    0.15   
## POTL     | 0.70 |      |      |      |    1.22    |    0.35   
## EXPR     | 0.47 |      |      |      |    2.21    |    0.54   
## ACAD     | 0.44 |      |      |      |    1.67    |    0.55   
## SCON     |      | 0.93 |      |      |    1.04    |    0.22   
## APPR     |      | 0.80 |      |      |    1.14    |    0.32   
## LIKE     |      | 0.70 |      |      |    1.08    |    0.35   
## RESM     |      |      | 0.99 |      |    1.08    |  5.00e-03 
## LETT     |      |      | 0.90 |      |    1.18    |    0.22   
## ORGN     |      |      |      | 0.89 |    1.09    |    0.03   
## COMM     |      |      |      | 0.76 |    1.13    |    0.21   
## 
## The 4 latent factors (promax rotation) accounted for 74.82% of the total variance of the original data (ML3 = 24.45%, ML4 = 19.64%, ML1 = 15.41%, ML2 = 15.32%).
summary(FA_ML_P_4F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML3 |   ML4 |   ML1 |   ML2
## ---------------------------------------------------------------
## Eigenvalues                     | 6.146 | 1.248 | 0.890 | 0.846
## Variance Explained              | 0.245 | 0.196 | 0.154 | 0.153
## Variance Explained (Cumulative) | 0.245 | 0.441 | 0.595 | 0.748
## Variance Explained (Proportion) | 0.327 | 0.263 | 0.206 | 0.205
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_P_4F_Residual <- residuals(FA_ML_P_4F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.03    NA                                                      
## COMM  0.05 -0.01    NA                                                
## CFIT -0.04  0.00  0.00    NA                                          
## EXPR  0.24 -0.05 -0.02 -0.08    NA                                    
## JFIT -0.04  0.00  0.00  0.01 -0.01    NA                              
## LETT -0.04 -0.03 -0.03 -0.01  0.06  0.00    NA                        
## LIKE -0.08 -0.01  0.00 -0.01 -0.09  0.03  0.04    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.26  0.03  0.02 -0.02  0.20 -0.02  0.00 -0.05  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.08 -0.01 -0.01  0.02  0.00  0.00 -0.01  0.05  0.00 -0.05  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_P_4F_RMS <- FA_ML_P_4F$rms)
## [1] 0.05795189
(FA_ML_P_4F_TLI <- FA_ML_P_4F$TLI)
## [1] 0.7644223
(FA_ML_P_4F_BIC <- FA_ML_P_4F$BIC)
## [1] -37.50857
(FA_ML_P_4F_MaxResidual   <- max(abs(FA_ML_P_4F_Residual),na.rm=TRUE))
## [1] 0.2590579
(FA_ML_P_4F_HighResidual  <- sum(FA_ML_P_4F_Residual>abs(0.05),na.rm=TRUE))
## [1] 10
(FA_ML_P_4F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_P_4F_HighResidualRate <- FA_ML_P_4F_HighResidual/FA_ML_P_4F_TotalResidual)
## [1] 0.1515152
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_P",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT","POTL","EXPR","ACAD")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT", "POTL", 
##     "EXPR", "ACAD")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##        0.9       0.9    0.92      0.64 8.8 0.024  7.2 1.2     0.66
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84   0.9  0.94
## Duhachek  0.85   0.9  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.86      0.87    0.86      0.62 6.5    0.034 0.021  0.66
## CFIT      0.88      0.88    0.87      0.66 7.6    0.028 0.011  0.69
## POTL      0.85      0.85    0.88      0.58 5.6    0.036 0.029  0.53
## EXPR      0.89      0.89    0.91      0.68 8.5    0.025 0.022  0.68
## ACAD      0.88      0.88    0.90      0.64 7.3    0.029 0.028  0.68
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.88  0.87  0.86   0.80  7.0 1.6
## CFIT 50  0.84  0.82  0.80   0.72  6.9 1.6
## POTL 50  0.91  0.92  0.90   0.85  7.3 1.4
## EXPR 50  0.76  0.78  0.71   0.64  7.3 1.4
## ACAD 50  0.81  0.83  0.78   0.72  7.4 1.3
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
## POTL 0.00 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
## ACAD 0.00 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","APPR","LIKE")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "APPR", "LIKE")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_P_4F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 4,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_P_4F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

##################################
# Conducting exploratory factor analysis
# using Maximum Likelihood extraction
# and Promax rotation
# with 5 factors
##################################
(FA_ML_P_5F <- fa(DPA.Descriptors.Numeric,
              nfactors = 5,
              fm="ml",
              rotate = "promax",
              residuals=TRUE,
              SMC=TRUE,
              n.obs=nrow(DPA.Descriptors.Numeric)))
## Factor Analysis using method =  ml
## Call: fa(r = DPA.Descriptors.Numeric, nfactors = 5, n.obs = nrow(DPA.Descriptors.Numeric), 
##     rotate = "promax", residuals = TRUE, SMC = TRUE, fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
##        ML5   ML4   ML2   ML3   ML1   h2    u2 com
## ACAD  0.95 -0.06  0.13 -0.10 -0.04 0.78 0.218 1.1
## APPR  0.15  0.64  0.18 -0.17  0.07 0.65 0.353 1.5
## COMM  0.02 -0.02  0.85  0.00  0.12 0.80 0.196 1.0
## CFIT  0.03  0.00  0.16  0.79  0.03 0.85 0.154 1.1
## EXPR  0.73  0.02 -0.19  0.06  0.15 0.64 0.362 1.2
## JFIT  0.07  0.04 -0.05  0.93  0.02 0.95 0.050 1.0
## LETT -0.03 -0.15  0.09  0.10  0.87 0.77 0.229 1.1
## LIKE -0.09  0.76  0.02  0.15  0.03 0.68 0.319 1.1
## ORGN -0.04  0.06  0.96  0.06 -0.09 0.96 0.035 1.0
## POTL  0.82  0.04  0.03  0.20 -0.12 0.87 0.132 1.2
## RESM  0.03  0.17 -0.08 -0.08  0.96 1.00 0.005 1.1
## SCON -0.03  1.02 -0.09  0.03 -0.09 0.87 0.130 1.0
## 
##                        ML5  ML4  ML2  ML3  ML1
## SS loadings           2.23 2.15 1.87 1.80 1.77
## Proportion Var        0.19 0.18 0.16 0.15 0.15
## Cumulative Var        0.19 0.36 0.52 0.67 0.82
## Proportion Explained  0.23 0.22 0.19 0.18 0.18
## Cumulative Proportion 0.23 0.45 0.64 0.82 1.00
## 
##  With factor correlations of 
##      ML5  ML4  ML2  ML3  ML1
## ML5 1.00 0.57 0.39 0.62 0.53
## ML4 0.57 1.00 0.58 0.51 0.46
## ML2 0.39 0.58 1.00 0.56 0.40
## ML3 0.62 0.51 0.56 1.00 0.47
## ML1 0.53 0.46 0.40 0.47 1.00
## 
## Mean item complexity =  1.1
## Test of the hypothesis that 5 factors are sufficient.
## 
## The degrees of freedom for the null model are  66  and the objective function was  10.7 with Chi Square of  472.51
## The degrees of freedom for the model are 16  and the objective function was  0.42 
## 
## The root mean square of the residuals (RMSR) is  0.02 
## The df corrected root mean square of the residuals is  0.04 
## 
## The harmonic number of observations is  50 with the empirical chi square  2.44  with prob <  1 
## The total number of observations was  50  with Likelihood Chi Square =  17.27  with prob <  0.37 
## 
## Tucker Lewis Index of factoring reliability =  0.986
## RMSEA index =  0.034  and the 90 % confidence intervals are  0 0.141
## BIC =  -45.32
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    ML5  ML4  ML2  ML3  ML1
## Correlation of (regression) scores with factors   0.96 0.96 0.98 0.98 1.00
## Multiple R square of scores with factors          0.92 0.93 0.97 0.96 0.99
## Minimum correlation of possible factor scores     0.85 0.85 0.94 0.92 0.98
(FA_ML_P_5F_Summary <- FA_ML_P_5F %>%
  model_parameters(sort = TRUE, threshold = "max"))
## # Rotated loadings from Factor Analysis (promax-rotation)
## 
## Variable | ML5  | ML4  | ML2  | ML3  | ML1  | Complexity | Uniqueness
## ---------------------------------------------------------------------
## ACAD     | 0.95 |      |      |      |      |    1.07    |    0.22   
## POTL     | 0.82 |      |      |      |      |    1.17    |    0.13   
## EXPR     | 0.73 |      |      |      |      |    1.24    |    0.36   
## SCON     |      | 1.02 |      |      |      |    1.03    |    0.13   
## LIKE     |      | 0.76 |      |      |      |    1.12    |    0.32   
## APPR     |      | 0.64 |      |      |      |    1.45    |    0.35   
## ORGN     |      |      | 0.96 |      |      |    1.04    |    0.04   
## COMM     |      |      | 0.85 |      |      |    1.04    |    0.20   
## JFIT     |      |      |      | 0.93 |      |    1.02    |    0.05   
## CFIT     |      |      |      | 0.79 |      |    1.09    |    0.15   
## RESM     |      |      |      |      | 0.96 |    1.09    |  4.99e-03 
## LETT     |      |      |      |      | 0.87 |    1.11    |    0.23   
## 
## The 5 latent factors (promax rotation) accounted for 81.81% of the total variance of the original data (ML5 = 18.55%, ML4 = 17.95%, ML2 = 15.60%, ML3 = 15.00%, ML1 = 14.72%).
summary(FA_ML_P_5F_Summary)
## # (Explained) Variance of Components
## 
## Parameter                       |   ML5 |   ML4 |   ML2 |   ML3 |   ML1
## -----------------------------------------------------------------------
## Eigenvalues                     | 6.215 | 1.301 | 0.958 | 0.877 | 0.477
## Variance Explained              | 0.185 | 0.179 | 0.156 | 0.150 | 0.147
## Variance Explained (Cumulative) | 0.185 | 0.365 | 0.521 | 0.671 | 0.818
## Variance Explained (Proportion) | 0.227 | 0.219 | 0.191 | 0.183 | 0.180
##################################
# Extracting the residuals
# from the Exploratory Factor Analysis
##################################
(FA_ML_P_5F_Residual <- residuals(FA_ML_P_5F,
                              diag=FALSE,
                              na.rm=TRUE))
##      ACAD  APPR  COMM  CFIT  EXPR  JFIT  LETT  LIKE  ORGN  POTL  RESM 
## ACAD    NA                                                            
## APPR  0.01    NA                                                      
## COMM  0.02 -0.01    NA                                                
## CFIT  0.00  0.00  0.00    NA                                          
## EXPR  0.00 -0.07 -0.03 -0.05    NA                                    
## JFIT  0.00  0.00  0.00  0.00  0.01    NA                              
## LETT -0.04 -0.04 -0.03 -0.01  0.07  0.00    NA                        
## LIKE  0.01  0.01  0.01 -0.03 -0.04  0.01  0.03    NA                  
## ORGN  0.00  0.00  0.00  0.00  0.01  0.00  0.01  0.00    NA            
## POTL  0.00  0.01  0.00  0.01  0.01  0.00  0.01  0.01  0.00    NA      
## RESM  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00    NA
## SCON -0.01 -0.01  0.00  0.01  0.04  0.00 -0.01  0.00  0.00  0.00  0.00
## [1]    NA
##################################
# Obtaining Fit Indices
##################################
(FA_ML_P_5F_RMS <- FA_ML_P_5F$rms)
## [1] 0.01923904
(FA_ML_P_5F_TLI <- FA_ML_P_5F$TLI)
## [1] 0.9858829
(FA_ML_P_5F_BIC <- FA_ML_P_5F$BIC)
## [1] -45.32318
(FA_ML_P_5F_MaxResidual   <- max(abs(FA_ML_P_5F_Residual),na.rm=TRUE))
## [1] 0.0733741
(FA_ML_P_5F_HighResidual  <- sum(FA_ML_P_5F_Residual>abs(0.05),na.rm=TRUE))
## [1] 2
(FA_ML_P_5F_TotalResidual <- length(DPA.Descriptors.Numeric)*(length(DPA.Descriptors.Numeric)-1)/2)
## [1] 66
(FA_ML_P_5F_HighResidualRate <- FA_ML_P_5F_HighResidual/FA_ML_P_5F_TotalResidual)
## [1] 0.03030303
##################################
# Graph the factor loading matrices
##################################
fa.diagram(FA_ML_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_P",
           cex=0.75)

##################################
# computing the internal consistency
# measure of reliability using the
# Cronbach's alpha coefficient
# for each factor
##################################
alpha(DPA.Descriptors.Numeric[,c("ACAD","POTL","EXPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ACAD", "POTL", "EXPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.89      0.89    0.85      0.72 7.8 0.028  7.3 1.2      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.82  0.89  0.93
## Duhachek  0.83  0.89  0.94
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ACAD      0.83      0.83    0.70      0.70 4.7    0.049    NA  0.70
## POTL      0.80      0.80    0.67      0.67 4.0    0.056    NA  0.67
## EXPR      0.88      0.89    0.80      0.80 7.8    0.032    NA  0.80
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ACAD 50  0.91  0.91  0.85   0.79  7.4 1.3
## POTL 50  0.92  0.92  0.88   0.82  7.3 1.4
## EXPR 50  0.88  0.88  0.76   0.72  7.3 1.4
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## ACAD 0.02 0.02 0.22 0.28 0.24 0.18 0.04    0
## POTL 0.04 0.06 0.18 0.22 0.30 0.18 0.02    0
## EXPR 0.00 0.10 0.20 0.24 0.24 0.18 0.04    0
alpha(DPA.Descriptors.Numeric[,c("SCON","LIKE","APPR")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("SCON", "LIKE", "APPR")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean   sd median_r
##       0.87      0.87    0.83       0.7 6.9 0.031  7.4 0.99      0.7
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.80  0.87  0.92
## Duhachek  0.81  0.87  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## SCON      0.78      0.78    0.64      0.64 3.5    0.062    NA  0.64
## LIKE      0.82      0.82    0.70      0.70 4.6    0.051    NA  0.70
## APPR      0.86      0.86    0.75      0.75 6.1    0.040    NA  0.75
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## SCON 50  0.92  0.91  0.86   0.80  7.3 1.2
## LIKE 50  0.90  0.89  0.82   0.76  7.4 1.1
## APPR 50  0.86  0.87  0.76   0.71  7.4 1.0
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## SCON 0.00 0.08 0.14 0.32 0.28 0.18 0.00    0
## LIKE 0.02 0.04 0.12 0.32 0.36 0.14 0.00    0
## APPR 0.00 0.02 0.16 0.32 0.38 0.10 0.02    0
alpha(DPA.Descriptors.Numeric[,c("ORGN","COMM")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("ORGN", "COMM")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.92      0.93    0.86      0.86  12 0.021  6.9 1.5     0.86
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.87  0.92  0.96
## Duhachek  0.88  0.92  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## ORGN      0.92      0.86    0.74      0.86 6.2       NA     0  0.86
## COMM      0.80      0.86    0.74      0.86 6.2       NA     0  0.86
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## ORGN 50  0.97  0.96   0.9   0.86  6.9 1.6
## COMM 50  0.96  0.96   0.9   0.86  6.9 1.5
## 
## Non missing response frequency for each item
##         3    4    5   6    7    8    9   10 miss
## ORGN 0.02 0.04 0.20 0.1 0.24 0.24 0.16 0.00    0
## COMM 0.04 0.04 0.06 0.2 0.30 0.28 0.06 0.02    0
alpha(DPA.Descriptors.Numeric[,c("RESM","LETT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("RESM", "LETT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.91      0.91    0.84      0.84  10 0.025  7.2 1.6     0.84
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.84  0.91  0.95
## Duhachek  0.86  0.91  0.96
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## RESM      0.84      0.84     0.7      0.84 5.1       NA     0  0.84
## LETT      0.83      0.84     0.7      0.84 5.1       NA     0  0.84
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## RESM 50  0.96  0.96  0.88   0.84  7.2 1.7
## LETT 50  0.96  0.96  0.88   0.84  7.2 1.7
## 
## Non missing response frequency for each item
##         4    5    6    7    8    9   10 miss
## RESM 0.08 0.06 0.22 0.18 0.16 0.24 0.06    0
## LETT 0.06 0.12 0.14 0.22 0.24 0.12 0.10    0
alpha(DPA.Descriptors.Numeric[,c("JFIT","CFIT")])
## 
## Reliability analysis   
## Call: alpha(x = DPA.Descriptors.Numeric[, c("JFIT", "CFIT")])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.94      0.94    0.88      0.88  15 0.018    7 1.6     0.88
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.89  0.94  0.96
## Duhachek  0.90  0.94  0.97
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## JFIT      0.87      0.88    0.78      0.88 7.5       NA     0  0.88
## CFIT      0.90      0.88    0.78      0.88 7.5       NA     0  0.88
## 
##  Item statistics 
##       n raw.r std.r r.cor r.drop mean  sd
## JFIT 50  0.97  0.97  0.91   0.88  7.0 1.6
## CFIT 50  0.97  0.97  0.91   0.88  6.9 1.6
## 
## Non missing response frequency for each item
##         3    4    5    6    7    8    9   10 miss
## JFIT 0.06 0.00 0.06 0.22 0.26 0.24 0.12 0.04    0
## CFIT 0.02 0.06 0.16 0.12 0.22 0.30 0.08 0.04    0
##################################
# Formulating the dandelion plot to
# visualize both factor variances and loadings
# from the factor loading matrices
##################################
FA_ML_P_5F_FactorLoading <- factload(DPA.Descriptors.Numeric,
                                  cormeth = "pearson",
                                  method = "mle",
                                  nfac = 5,
                                  rotation = "promax")

DandelionPlotPalette <- rev(rainbow(100, start = 0, end = 0.2))

dandelion(FA_ML_P_5F_FactorLoading,
          bound=0,
          mcex=c(1,1.2),
          palet=DandelionPlotPalette)

par(mfrow=c(1,3))
fa.diagram(FA_ML_P_3F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_P : 3 Factors",
           cex=0.75)
fa.diagram(FA_ML_P_4F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_P : 4 Factors",
           cex=0.75)
fa.diagram(FA_ML_P_5F,
           sort=TRUE,
           cut=0,
           digits=3,
           main="FA_ML_P : 5 Factors",
           cex=0.75)

1.7 Algorithm Comparison Summary


Code Chunk | Output
##################################
# Consolidating the fit indices
##################################
FA_RMSSummary <- c(FA_PA_V_3F_RMS,
                   FA_PA_V_4F_RMS,
                   FA_PA_V_5F_RMS,
                   FA_PA_P_3F_RMS,
                   FA_PA_P_4F_RMS,
                   FA_PA_P_5F_RMS,
                   FA_ML_V_3F_RMS,
                   FA_ML_V_4F_RMS,
                   FA_ML_V_5F_RMS,
                   FA_ML_P_3F_RMS,
                   FA_ML_P_4F_RMS,
                   FA_ML_P_5F_RMS)

FA_TLISummary <- c(FA_PA_V_3F_TLI,
                   FA_PA_V_4F_TLI,
                   FA_PA_V_5F_TLI,
                   FA_PA_P_3F_TLI,
                   FA_PA_P_4F_TLI,
                   FA_PA_P_5F_TLI,
                   FA_ML_V_3F_TLI,
                   FA_ML_V_4F_TLI,
                   FA_ML_V_5F_TLI,
                   FA_ML_P_3F_TLI,
                   FA_ML_P_4F_TLI,
                   FA_ML_P_5F_TLI)

FA_BICSummary <- c(FA_PA_V_3F_BIC,
                   FA_PA_V_4F_BIC,
                   FA_PA_V_5F_BIC,
                   FA_PA_P_3F_BIC,
                   FA_PA_P_4F_BIC,
                   FA_PA_P_5F_BIC,
                   FA_ML_V_3F_BIC,
                   FA_ML_V_4F_BIC,
                   FA_ML_V_5F_BIC,
                   FA_ML_P_3F_BIC,
                   FA_ML_P_4F_BIC,
                   FA_ML_P_5F_BIC)

FA_HighResidualRateSummary <- c(FA_PA_V_3F_HighResidualRate,
                                FA_PA_V_4F_HighResidualRate,
                                FA_PA_V_5F_HighResidualRate,
                                FA_PA_P_3F_HighResidualRate,
                                FA_PA_P_4F_HighResidualRate,
                                FA_PA_P_5F_HighResidualRate,
                                FA_ML_V_3F_HighResidualRate,
                                FA_ML_V_4F_HighResidualRate,
                                FA_ML_V_5F_HighResidualRate,
                                FA_ML_P_3F_HighResidualRate,
                                FA_ML_P_4F_HighResidualRate,
                                FA_ML_P_5F_HighResidualRate)

FA_AlgorithmSummary <- c("FA_PA_V_3F",
                         "FA_PA_V_4F",
                         "FA_PA_V_5F",
                         "FA_PA_P_3F",
                         "FA_PA_P_4F",
                         "FA_PA_P_5F",
                         "FA_ML_V_3F",
                         "FA_ML_V_4F",
                         "FA_ML_V_5F",
                         "FA_ML_P_3F",
                         "FA_ML_P_4F",
                         "FA_ML_P_5F")

FA_Summary <- cbind(FA_RMSSummary,
                    FA_TLISummary,
                    FA_BICSummary,
                    FA_HighResidualRateSummary,
                    FA_AlgorithmSummary)

FA_Summary <- as.data.frame(FA_Summary)
names(FA_Summary) <- c("RMS",
                       "TLI",
                       "BIC",
                       "HighResidualRate",
                       "Algorithm")

FA_Summary$RMS <- as.numeric(as.character(FA_Summary$RMS))
FA_Summary$TLI <- as.numeric(as.character(FA_Summary$TLI))
FA_Summary$BIC <- as.numeric(as.character(FA_Summary$BIC))
FA_Summary$HighResidualRate <- as.numeric(as.character(FA_Summary$HighResidualRate))

FA_Summary$Algorithm <- factor(FA_Summary$Algorithm ,
                                        levels = c("FA_PA_V_3F",
                                                   "FA_PA_V_4F",
                                                   "FA_PA_V_5F",
                                                   "FA_PA_P_3F",
                                                   "FA_PA_P_4F",
                                                   "FA_PA_P_5F",
                                                   "FA_ML_V_3F",
                                                   "FA_ML_V_4F",
                                                   "FA_ML_V_5F",
                                                   "FA_ML_P_3F",
                                                   "FA_ML_P_4F",
                                                   "FA_ML_P_5F"))

print(FA_Summary, row.names=FALSE)
##         RMS       TLI       BIC HighResidualRate  Algorithm
##  0.07338105 0.6191606 -22.76274       0.27272727 FA_PA_V_3F
##  0.03861068 0.7317578 -33.01886       0.15151515 FA_PA_V_4F
##  0.01483907 0.9648451 -43.43181       0.00000000 FA_PA_V_5F
##  0.07338105 0.6191606 -22.76274       0.27272727 FA_PA_P_3F
##  0.03861068 0.7317578 -33.01886       0.15151515 FA_PA_P_4F
##  0.01483907 0.9648451 -43.43181       0.00000000 FA_PA_P_5F
##  0.07961754 0.6858498 -35.60434       0.24242424 FA_ML_V_3F
##  0.05795189 0.7644223 -37.50857       0.15151515 FA_ML_V_4F
##  0.01923904 0.9858829 -45.32318       0.03030303 FA_ML_V_5F
##  0.07961754 0.6858498 -35.60434       0.24242424 FA_ML_P_3F
##  0.05795189 0.7644223 -37.50857       0.15151515 FA_ML_P_4F
##  0.01923904 0.9858829 -45.32318       0.03030303 FA_ML_P_5F
(RMS_Plot <- dotplot(Algorithm ~ RMS,
                     data = FA_Summary,
                     main = "Algorithm Standardized Root Mean Square of the Residual Comparison",
                     ylab = "Algorithm",
                     xlab = "RMSR",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

(TLI_Plot <- dotplot(Algorithm ~ TLI,
                     data = FA_Summary,
                     main = "Algorithm Tucker-Lewis Fit Index Comparison",
                     ylab = "Algorithm",
                     xlab = "TLI",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

(BIC_Plot <- dotplot(Algorithm ~ BIC,
                     data = FA_Summary,
                     main = "Algorithm Bayesian Information Criterion Comparison",
                     ylab = "Algorithm",
                     xlab = "BIC",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

(HighResidualRate_Plot <- dotplot(Algorithm ~ HighResidualRate,
                     data = FA_Summary,
                     main = "Algorithm High Residual Rate Comparison",
                     ylab = "Algorithm",
                     xlab = "High Residual Rate",
                     auto.key = list(adj = 1),
                     type=c("p", "h"),  
                     origin = 0,
                     alpha = 0.45,
                     pch = 16,
                     cex = 2))

2. References


[Book] Multiple Factor Analysis by Example Using R by Jerome Pages
[Book] Nonlinear Principal Component Analysis and Its Applications by Yuichi Mori, Masahiro Kuroda and Naomichi Makino
[Book] Applied Predictive Modeling by Max Kuhn and Kjell Johnson
[Book] An Introduction to Statistical Learning by Gareth James, Daniela Witten, Trevor Hastie and Rob Tibshirani
[Book] Multivariate Data Visualization with R by Deepayan Sarkar
[Book] Machine Learning by Samuel Jackson
[Book] Data Modeling Methods by Jacob Larget
[Book] Introduction to R and Statistics by University of Western Australia
[Book] Feature Engineering and Selection: A Practical Approach for Predictive Models by Max Kuhn and Kjell Johnson
[Book] Introduction to Research Methods by Eric van Holm
[Book] A Step-by-Step Guide to Exploratory Factor Analysis with R and RStudio by Marley Watkins
[R Package] AppliedPredictiveModeling by Max Kuhn
[R Package] caret by Max Kuhn
[R Package] rpart by Terry Therneau and Beth Atkinson
[R Package] lattice by Deepayan Sarkar
[R Package] dplyr by Hadley Wickham
[R Package] moments by Lukasz Komsta and Frederick
[R Package] skimr by Elin Waring
[R Package] RANN by Sunil Arya, David Mount, Samuel Kemp and Gregory Jefferis
[R Package] corrplot by Taiyun Wei
[R Package] tidyverse by Hadley Wickham
[R Package] lares by Bernardo Lares
[R Package] DMwR by Luis Torgo
[R Package] gridExtra by Baptiste Auguie and Anton Antonov
[R Package] rattle by Graham Williams
[R Package] RColorBrewer by Erich Neuwirth
[R Package] stats by R Core Team
[R Package] factoextra by Alboukadel Kassambara and Fabian Mundt
[R Package] FactoMineR by Francois Husson, Julie Josse, Sebastien Le and Jeremy Mazet
[R Package] gplots by Tal Galili
[R Package] qgraph by Sacha Epskamp
[R Package] ggplot2 by Hadley Wickham, Winston Chang, Lionel Henry and Thomas Lin Pedersen
[R Package] psych by William Revelle
[R Package] nFactors by Gilles Raiche and David Magis
[R Package] MBESS by Ken Kelley
[R Package] DandEFA by Artur Manukyan, Ahmet Sedef, Erhan Cene and Ibrahim Demir
[R Package] EFAtools by Markus Steiner and Silvia Grieder
[R Package] parameters by Daniel Ludecke
[R Package] performance by Daniel Ludecke
[Article] 6 Dimensionality Reduction Techniques in R (with Examples) by CMDLineTips Team
[Article] 6 Dimensionality Reduction Algorithms With Python by Jason Brownlee
[Article] Introduction to Dimensionality Reduction for Machine Learning by Jason Brownlee
[Article] Introduction to Dimensionality Reduction by Geeks For Geeks
[Article] Factor Analysis with the psych package by Michael Clark
[Article] Factor Analysis in R with Psych Package: Measuring Consumer Involvement by Peter Prevos
[Article] Factor Analysis in R by Jinjian Mu
[Article] How To: Use the psych package for Factor Analysis and Data Reduction by William Revelle
[Article] A Practical Introduction to Factor Analysis: Exploratory Factor Analysis by UCLA Advanced Research Computing Team
[Article] Examining the Big 5 Personality Dataset with Factor Analysis by Tarid Wongvorachan
[Article] Principal Component Analysis versus Exploratory Factor Analysis by Diana Suhr
[Article] Exploratory Factor Analysis by Columbia University Irving Medical Center
[Article] Factor Analysis Example by Charles Zaiontz
[Article] Factor Analysis Guide with an Example by Jim Frost
[Article] What Is Factor Analysis and How Does It Simplify Research Findings? by Qualtrics Team
[Article] How Can I Perform A Factor Analysis With Categorical (Or Categorical And Continuous) Variables? by UCLA Advanced Research Computing Team
[Article] Factor Analysis on Ordinal Data Example in R (psych, homals) by Jiayu Wu
[Publication] Dandelion Plot: A Method for the Visualization of R-mode Exploratory Factor Analyses by Artur Manukyan, Erhan Cene, Ahmet Sedef and Ibrahim Demir (Computational Statistics)
[Course] Applied Data Mining and Statistical Learning by Penn State Eberly College of Science